2010-12-13 92 views
2

我在想法从头开始使用PHP的网站&使用MVC架构的MYSQL。但根据客户要求,现场必须防止SQL注入和代码注入。如何防止从SQL注入网站

我需要做什么必要的步骤。

OR

这是开始从SQL注入和代码注入阻止该网站的最佳框架。

我没有要求这个创建一个讨论牢记。我只想知道哪一个更好,以便我可以从专业人员指导开始。

感谢我前进......

回答

3

逃离$_GET[]所有输入,$_POST[]等与mysql_real_escape_string()的时候了。

1

使用mysql_real_escape_string传递字符串参数来构建SQL语句。其中包括您作为字符串处理的数字等参数。

0

使用mysql_real_escape_string

+0

为什么downvote? – 2010-12-13 11:47:48

+0

我也不知道,为什么? – 2010-12-13 11:49:37

5

到目前为止,最可靠的方法来防止SQL注入是使用mysqli参数化查询完全代替手动构建SQL语句。

它比mysql_real_escape_string()好得多,因为意外忘记使用它的风险较低。

为了防止服务器端代码注入,永远不要在任何情况下使用eval()

为了防止JavaScript注入,显示它或将它存储在数据库之前处理与strip_tags()所有用户生成的内容。

+1

我upvoted,但请记住,仅strip_tags不会保护您免受XSS攻击。考虑htmlenitites,如果你打算把输入放到标签的属性中,也为'(其中htmlentities不会捕获但可以逃脱你的属性)创建一个实体,只需要用' – DampeS8N 2010-12-13 12:30:35

3

这两个功能将帮助您:

function escape($escape) 
{ 
    $escape = mysql_real_escape_string($escape) ; 
    return $escape ; 
} 

function _INPUT($name) 
{ 
    if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
     return strip_tags($_GET[$name]); 
     } 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     return strip_tags($_POST[$name]); 
     } 
} 

发送与escape()函数一切分贝,并抓住一切形式的与_Input()。除了布尔函数,如空($ _ POST ['name'])或isset($ _ POST ['name'])等,您可以对每个$ _POST或$ _GET使用_INPUT函数等。

0

执行此操作的最佳方法是用准备好的语句,不用。这将使您不必手动编写代码并自行平衡一切。 PHP的mysqli内置了它,并且是迈向这个世界的良好开端。看看这个PHP manual page

0

在将这些数据放入数据库之前,先将所有这些好的提示都转义出来之后,您必须仔细考虑问题的第二面。

逃离输出映象

这意味着您的应用程序的每个输出应该在此基础上输出格式的规则进行转义。 例如,当您为HTML页面回显某些内容时,您必须通过htmlentites将其转义,以便数据中的任何HTMl在输出中不会为html。 而对于csv输出你应该避免引号或逗号,对于JSON你也应该逃避一些事情,等等每个输出都有他的规则。

这个东西有时用于在数据库中存储潜在危险的数据(js代码,Html代码),只需在插入前防止SQL注入。然后确保它在任何输出之前正确地转义。

另一种思维方式是在数据库存储之前阻止任何js或HTML代码,但是您仍应该转义输出(以防)。

在谈论框架时,您应该看看Zend_Filter上的Zend Framework,Zend_Validate和视图上的转义函数。