MySQL编码查询,没有空间

时间:2010-01-17 12:42:19

标签: php mysql sql-injection

我想知道是否可以创建没有MySQL空间的请求?

我测试了我自己网站的安全性,并且我已经输入:str_replace(" ", "", $POST['id']);所有sql注入变为:

id=-1 UNION SELECT pass...

在strreplace之后:

-1UNIONSELECTpass

这会在我自己的网站上给我一个高水平的安全性吗?是否有其他方法可以将SQL注入查询?

我已经在查询中放了一个mysql_real_escape_string()。

3 个答案:

答案 0 :(得分:6)

防止SQL注入是一个相当广泛的主题(并且有足够的内容可供阅读),但在示例中,您编写了一个更简单的预防方法可能是为了确保您只接受整数。如下所示:

var $id = (int)$_POST['id'];

然后在查询中使用$ id。

答案 1 :(得分:3)

准备PDO

http://php.net/manual/en/pdo.prepare.php

  

调用PDO :: prepare()和   PDOStatement :: execute()用于语句   将多次发布   具有不同的参数值   优化你的表现   应用程序允许驱动程序   协商客户端和/或服务器端   缓存查询计划和元   信息,并有助于防止SQL   注射攻击通过消除   需要手动引用参数

另见这个最佳问题/答案:

How can I prevent SQL injection in PHP?

答案 2 :(得分:0)

@Boris,我建议您按照@haim的建议使用PDO。它将提供多种优势,例如使您的应用程序更加与数据库无关,并提供转义机制,以防止您选择使用的数据库引擎进行SQL注入。

几年前我写了一篇关于PHP webapp安全性的文章,其中包含一个专门针对SQL注入问题的部分。我确信现在有更好更新的材料,但要查看它以了解更多关于不同类型的安全问题以及如何防止它们的问题并不会有害:Real-world PHP Security。祝你好运!