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