获取易受SQL注入攻击的参数-PHP

获取易受SQL注入攻击的参数-PHP,php,mysql,security,sql-injection,Php,Mysql,Security,Sql Injection,我被要求处理一个由另一个程序员建立的站点的安全问题。到目前为止,我还没有看到任何代码,所以我在这一点上脱离了假设,我想介绍一下我的基础。托管该网站的小组进行了安全检查,发现他们的代码易受SQL注入攻击 示例:www.Example.com/code.php?pid=2&ID=35(GET参数ID易受SQL注入攻击) 现在,因为我是一个新手,我已经解释过我可能可以解决主机的问题,但是他们的站点仍然需要有更深入的安全知识的人来检查 因此,为了处理潜在的SQL注入(并且不查看代码),我将使用mysql

我被要求处理一个由另一个程序员建立的站点的安全问题。到目前为止,我还没有看到任何代码,所以我在这一点上脱离了假设,我想介绍一下我的基础。托管该网站的小组进行了安全检查,发现他们的代码易受SQL注入攻击

示例:www.Example.com/code.php?pid=2&ID=35(GET参数ID易受SQL注入攻击)

现在,因为我是一个新手,我已经解释过我可能可以解决主机的问题,但是他们的站点仍然需要有更深入的安全知识的人来检查

因此,为了处理潜在的SQL注入(并且不查看代码),我将使用mysql\u real\u escape\u字符串:

$query = sprintf("SELECT * FROM table WHERE pid='%s' AND ID='%s'",
            mysql_real_escape_string($pid),
            mysql_real_escape_string($id));

另外,我会考虑MyQuiLialRealEfEXEY字符串和准备好的语句,但我不知道它们是如何配置的。但是mysql\u real\u escape\u string会处理潜在的SQL注入吗?

该函数应该很好-您的变量在SQL语句的单引号内,任何单引号或双引号都会被转义


这意味着没有任何变量可以“跳出”语句。

是的,mysql\u real\u escape\u string()将转义任何潜在的危险字符。如果您知道参数是数字的,那么使用


您还应该注意--这将确保只执行1条语句,并防止额外的SQL漏洞

这应该没问题,但我始终建议使用预先准备好的语句。

如果ID和PID是整数字段,为什么不将它们转换为int

这样,您肯定有一个数字,一个无SQL注入:

$pid = (int) $pid;
$id = (int) $id;

如果可以,跳过旧的
mysql.*
内容并使用PDO

$pdo = new PDO('mysql:host=localhost;dbname=whatever', $username, $password);

$statement = $pdo->prepare('SELECT * FROM table WHERE pid=:pid AND ID=:id');

$statement->bindParam(':pid', $_GET['pid']);

$statement->bindParam(':id', $_GET['id']);

$results = $statement->execute();

var_dump($results->fetchAll());

你最好使用事先准备好的陈述。