如何通过地址栏保护表单mysql注入

时间:2011-01-08 09:00:08

标签: php mysql

这不起作用,

<?php 
if(!isset($_GET['id'])){
    header('location: index.php');
}
$id = $_GET['id'];
if(!is_int($id)){
    header('location: index.php');
    }


 ?>

虽然网址为http://localhost/JMToday/classes/images.php?id=53

,但它总是重定向我

4 个答案:

答案 0 :(得分:1)

另一点是将PDOPrepared Statements一起使用。使用PDO和Prepared Statements可以获得一定程度的数据库抽象,从而降低了使用mysql_real_escape_string或类似功能的必要性。

另一种解决方案是ORM,这可能是一个很大的矫枉过正,他们很可能会使用PDO,但如果要求与之匹配,为什么不呢......

答案 1 :(得分:0)

检查$ id是否为整数

if (!is_int($_GET['id']){
echo 'bad id';
}

答案 2 :(得分:0)

一个无意义的问题和一堆无意义的答案。

  1. 您的问题与注射无关。这是参数验证 如果您认为该参数无效,则不应返回重定向,而应返回404状态。

  2. 外部变量始终是字符串类型。所以,你必须做一些regexp或is_numeric。

  3. 它仍然与注射无关。您的数据库代码应该能够处理任何类型的数据。有非常简单的机制来处理它。您可以参考this answer了解详情

答案 3 :(得分:0)

你可以使用两个东西使用spring来设置查询 喜欢这个

$professionalQry = sprintf("SELECT * FROM `professional` WHERE `user_id`=%d",$userId);

OR

使用mysql_real_escape_string

喜欢这个

$professionalQry = sprintf("SELECT * FROM `professional` WHERE `user_id`='%s'",
                           mysql_real_escape_string($userId));