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