我想用PHP和Linux从头开始创建一个网站。 MYSQL使用MVC架构。但根据客户要求,网站必须防止SQL INJECTION和CODE INJECTION。
我需要做的是什么必要的步骤。
OR
哪个是启动网站的最佳框架,可防止SQL INJECTION和CODE INJECTION。
我并没有要求这个创建一个牢记的讨论。我只是想知道哪一个更好,以便我可以从专业人士的指导开始。
谢谢我提前......答案 0 :(得分:5)
到目前为止,防止SQL注入的最可靠方法是独占使用mysqli参数化查询,而不是手动构建SQL语句。
它比mysql_real_escape_string()
好得多,因为意外忘记使用它的风险较低。
为防止服务器端代码注入,请勿在任何情况下使用eval()
为了防止Javascript注入,请在显示所有用户生成的内容并将其存储在数据库中之前,使用strip_tags()
处理所有用户生成的内容。
答案 1 :(得分:3)
立即转发$_GET[]
,$_POST[]
等所有来自mysql_real_escape_string()
的输入。
答案 2 :(得分: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()函数将所有内容发送到db并使用_INPUT()获取所有表单。你可以为每个$ _POST或$ _GET使用_INPUT函数,除了布尔函数,如空($ _ POST ['name'])或isset($ _ POST ['name'])等。
答案 3 :(得分:1)
在传递字符串参数以构建SQL语句时使用mysql_real_escape_string。这包括您作为字符串处理的数字等参数。
答案 4 :(得分:1)
答案 5 :(得分:0)
使用mysql_real_escape_string
答案 6 :(得分:0)
执行此操作的最佳方法是使用预准备语句,禁止无。这将使您不必自己手动编码和平衡所有内容。 PHP的mysqli
内置了它,是迈向这个世界的第一步。请查看PHP manual page。
答案 7 :(得分:0)
在将所有用户数据放入数据库之前提供的所有好的技巧之后,你必须在问题的第二面思考。
逃离ouptuts
这意味着应根据此输出格式的规则对应用程序的每个输出进行转义。 例如,当您为HTML页面回显某些内容时,必须通过htmlentites对其进行转义,以便数据中包含的任何HTMl在输出中都不会是html。 对于csv输出,你应该转义引号或逗号,对于JSON你也应该转义,等等,每个输出都有他的规则。
这个东西有时会用来存储数据库中存在潜在危险的数据(js代码,Html代码),只是在插入之前阻止SQL注入。然后确保在输出之前正确转义它。
另一种思维方式是在数据库存储之前阻止任何js或HTML代码,但你仍然应该转义输出(如果是)。
谈到框架,你应该看看Zend_Filter,Zend_Validate上的Zend Framework以及视图上的转义函数。