我正在试图弄清楚如何防止sqlinjection,我写了这个基本功能:function
antiInjectie($inputfromform){
$temp = str_replace("'", "`",$inputfromform);
$temp = str_replace("--", "~~",$temp);
return htmlentitites($temp);
}
然而有人告诉我也要考虑十六进制值,但我该怎么做?
更新 我坚持使用MDB2和pgsql
答案 0 :(得分:6)
Bobby-Tables有一个很好的指导来防止SQL注入。
简而言之:不要自己扭曲输入,使用允许绑定参数的数据库API方法。
答案 1 :(得分:2)
使用MDB2,您可以使用相关问题PDO abstraction中提出的PHP的原生Best way to stop SQL Injection in PHP。您可以使用带有prepare
and execute
或quoting的预准备语句并手动插入值。
答案 2 :(得分:2)
使用pg_query_params(),这是避免使用PHP和PostgreSQL进行SQL注入的最简单的函数。
答案 3 :(得分:1)
首先,不要自己编写任何转义功能。它们很可能被破坏,数据库库很可能包含正确的数据库。对于mysql,您可以使用mysql_real_escape_string。
更好的长期解决方案不是将完整查询创建为文本,而是使用准备好的查询并在执行期间传递值。对于mysql,请检查mysqli扩展名。