php中如何防止SQL注入

我们知道,无论是asp还是php设计的网站程序都可能存在注入问题,而SQL一旦存在注入漏洞,攻击者就几乎可以掌控整个网站,那么我们怎么最小化防止SQL注入呢?

严格过滤用户传过来的数据,也可以说永远不要相信用户传来的数据.尽可能给用户最小权限,如在MySQL中可以创建user权限,这样就算攻击者获得数据库信息也无可奈何.

在php中接收用户传来的数据一般是通过GET或者是POST,而避免注入方式就是过滤.以下是我推荐过滤的方法

//对$_GET $_POST数据进行过滤
function check_input($value){
    //去除斜杠
    if(get_magic_quotes_gpc()){
        $value = stripslashes($value);
    }
    $value = mysql_real_escape_string($value);
    return $value;
}
//用法
//check_input($_GET['id']);

以上用了 mysql_real_escape_string 函数来过滤,他会将 ' 转义成 \' 这样就避免了SQL注入.

比如某新闻新闻页为 news.php?id=1 通过传入id值来获取文章,我们可以用intval()来强制转整形.

通常用户可能构造from表单来恶意提交.那么我们可以判断下看用户的值是否在我们可控的范围内.

比如通过

<option value="1">男</option><option value="2">女</option>

传入的值,我们知道只有几种可能那么我们可以判断下看用户的值是否在我们可控的范围内.

if($_GET['sex']!==1||$_GET['sex']!==2){

exit('不男不女!!!');

}

以上是我常用的方法,如果有更好的方法欢迎与我联系!