执行SQL查询时,必须清理字符串,否则用户可以在您的网站上执行恶意SQL。

我通常只有一个函数escape_string(blah),它:

  • 替换逃逸( \\ )与双逃逸( \\\\ )。
  • 替换单引号( ' )与一个转义的单引号( \\' )。

这够了吗? 我的代码中有漏洞吗? 有没有一个库可以快速可靠地为我做到这一点?

我想在Perl,Java和PHP中看到优雅的解决方案。

===============>>#1 票数:8 已采纳

为了最大限度地提高安全性,性能和正确性,请使用预先准 以下是使用不同语言(包括PHP)的大量示例执行此操作的方法:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

===============>>#2 票数:2

我也会逃避评论(双击)

--

===============>>#3 票数:1

在PHP中使用的一件好事是PDO 处理保护SQL(以及一般的所有SQL内容)需要花费大量的猜测。 它支持预处理语句,这对于阻止SQL注入攻击有很大帮助。

关于PDO的一很好的入门书包含在Davey Shafik的书“ The PHP Anthology 101 Essential Tips,Tricks&Hacks”等第二版中 让学习成为一件轻而易举的事,并作为参考。 除了实际的SQL查询之外,我甚至不需要考虑任何其他事情。

===============>>#4 票数:0

MySQL C API拥有自己的mysql_escape_string() 使用它或它的等价物是最好的。

===============>>#5 票数:0

在MySQL查询中,当使用LIKE时,还要确保转义“_”字符,因为它没有被mysql_real_escape_string转义。

如需参考,请点击此处

===============>>#6 票数:0

使用哪种语言? 看起来几乎所有这些都具有内置的SQL转义函数,可以更好地使用。

例如,PHP有mysql_real_escape_stringaddslashes

===============>>#7 票数:0

最好将准备好的语句与占位符一起使用。 您使用的是PHP,.NET ......无论哪种方式,预处理语句都会提供更多安全性,但我可以提供样本。

===============>>#8 票数:0

在PHP中,我正在使用这个,我会感谢每一条评论:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

如果字段可以为NULL,则需要再验证一次:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

这很有趣! (希望帖子能正确发送下划线而不是_)

===============>>#9 票数:0

使用准备/参数化查询!

===============>>#10 票数:0

使用预备陈述。

===============>>#11 票数:-1

我不确定MySql是否支持参数化查询,如果是这样,你应该努力走这条路。 这将确保用户输入不能做任何恶意的事情。

否则,除了你提到的内容之外,一些“坏”字符将是分号(;)和注释( - 和/ * * /)。

  ask by andrewrk translate from so

未解决问题?本站智能推荐: