PHP+Mysql防止SQL注入的3种方法!

PHP+Mysql防止SQL注入的3种方法:

方法一:

mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 !

使用方法如下:

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

使用  mysql_real_escape_string() 作为用户输入的包装器,就可以避免用户输入中的任何恶意 SQL 注入。

方法二:

打开magic_quotes_gpc来防止SQL注入

php.ini中有一个设置:magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,
比如把 ‘ 转为 \’等,对于防止sql注射有重大作用。

如果magic_quotes_gpc=Off,则使用addslashes()函数

方法三:

自定义函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
* 防止sql注入自定义方法一
* author: xiaochuan
* @param: mixed $value 参数值
*/
function check_param($value=null) { 
        #  select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile
    $str 'select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile';
    if(!$value) {
        exit('没有参数!'); 
    }elseif(eregi($str$value)) { 
        exit('参数非法!');
    }
    return true; 
 
/**
* 防止sql注入自定义方法二
* author: xiaochuan
* @param: mixed $value 参数值
*/
function str_check( $value ) { 
    if(!get_magic_quotes_gpc()) { 
        // 进行过滤 
        $value addslashes($value); 
    
    $value str_replace("_""\_"$value); 
    $value str_replace("%""\%"$value); 
     
   return $value
 
/**
* 防止sql注入自定义方法三
* author: xiaochuan
* @param: mixed $value 参数值
*/
function post_check($value) { 
    if(!get_magic_quotes_gpc()) {
        // 进行过滤  
        $value addslashes($value);
    
    $value str_replace("_""\_"$value); 
    $value str_replace("%""\%"$value); 
    $value nl2br($value); 
    $value = htmlspecialchars($value); 
    return $value
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注