防止SQL注入攻击

sanlanlan 2017-6-18 标签: mysql 浏览:1698 评论:0

 SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据库提交不良的数据或查询语句来实现,很可能使数据库中的记录遭到暴露,更改或被删除。


    MySQL操作函数中有addslashes()、mysql_real_escape_string()、mysql_escape_string()等函数,可将特殊字符和可能引起数据库操作出错的字 符转义。


    mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。

三种防止SQL注入的方法:

一、mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集。
使用方法:


$username = mysql_real_escape_string($username);
  
$pwd = mysql_real_escape_string($pwd);



$sql = "select count(*) as ctr from users where username='".$username."' and password='".$pw."' limit 1";

二、打开magic_quotes_gpc来防止SQL注入。

  使用方法:php.ini中有一个设置:magic_quotes_gpc = Off

  这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 '转为 \'等,对于防止sql注入有重大作用。如果magic_quotes_gpc=Off,则使用addslashes()函数。


三、自定义函数。

function inject_check($sql_str) { 
    return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);
    } 
function verify_id($id=null) { 
    if(!$id) {
        exit('没有提交参数!'); 
    } elseif(inject_check($id)) { 
        exit('提交的参数非法!');
    } elseif(!is_numeric($id)) { 
        exit('提交的参数非法!'); 
    } 
    $id = intval($id); 
      
    return $id; } 
 
function str_check( $str ) { 
    if(!get_magic_quotes_gpc()) { 
        $str = addslashes($str); // 进行过滤 
    } 
    $str = str_replace("_", "\_", $str); 
    $str = str_replace("%", "\%", $str); 
      
    return $str; } 
 
function post_check($post) { 
    if(!get_magic_quotes_gpc()) { 
        $post = addslashes($post);
    } 
    $post = str_replace("_", "\_", $post); 
    $post = str_replace("%", "\%", $post); 
    $post = nl2br($post); 
    $post = htmlspecialchars($post); 
     
    return $post; 
}

本文相关标签: php sql

发表评论: