我知道,当我们谈论在php / mysql中准备好注入的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);
}该函数会影响字符串,因为它会替换用户可能在其输入中输入的一些基本字符((,),;),但我认为即使允许这些字符,它的效果也几乎相同。