除了php/mysqlweb应用程序中准备好的语句之外,还有其他选项可以避免sql注入吗


Are there any other options to avoid sql injection besides prepared statements in php/mysql web applications?

我知道,当我们谈论php/mysql准备的stamments中的sql注入时,我们永远不确定这是否足够,但我想知道是否有其他有效的解决方案来防止sql注入。

此外,我还有这个小函数来解析字符串,以避免基本的sql注入攻击。

function cleanString($str) {
$strEncoding = mb_detect_encoding($str) != 'UTF-8' ? 'ISO-8859-15' : 'UTF-8';
$str = trim($str);
$str = preg_replace('/('s|'%20){2,}/', ' ', $str);// Elimino espacios
$str = preg_replace('/'t|'%09|'%0b|'%0B/', ' ', $str);// Elimino tabulaciones
$str = preg_replace('/'n|'r|'%0a|'%0A|'%0d|'%0D/', '', $str);// Elimino entradas de nueva línea
// Caracteres especiales más importantes ", &, ', (, ), -, ;, <, =, >, `, ~
$str = preg_replace('/'(|')|'-{2}|;|`|~/', '', $str);// Elimino algunos caracteres especiales
// Elimino cadenas y secuencia de bytes sospechosas
$str = preg_replace('/((0x2)(2|6|7|8|9|d|D))|((0x3)(b|B|c|C|d|D|e|E))|0x60|0x7e|0x7E/', '', $str);
$str = preg_replace('/'%22|'%26|'%27|'%28|'%29|'%2d|'%2D|'%3b|'%3B|'%3c|'%3C|'%3d|'%3D|'%3e|'%3E|'%60|'%7e|'%7E/', '', $str);
return htmlspecialchars($str, ENT_QUOTES, $strEncoding);
}

函数会影响字符串,因为它替换了一些基本字符((,),;)用户可以在他们的输入中输入,但我认为即使我允许这些字符,它的工作原理也基本相同。

只需使用mysql_real_eescape()和htmlspecialchar()过滤输入,即可停止注入并停止XSS(?)。不过,绑定参数和准备查询更好。