?
1
2
3
$sql= select count(*)asctr from users where username
='.mysql_real_escape_string($username).'and
password='. mysql_real_escape_string($pw).'limit 1;
使用
mysql_real_escape_string()
作为用户输入的包装器,就可以避免用户输入中的任何恶意 sql 注入。
(2) 打开magic_quotes_gpc来防止sql注入
php.ini中有一个设置:magic_quotes_gpc = off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,
比如把 ' 转为 \'等,对于防止sql注射有重大作用。
如果magic_quotes_gpc=off,则使用addslashes()函数
(3)自定义函数
?
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
functioninject_check($sql_str) {
returneregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile',$sql_str);
}
functionverify_id($id=null) {
if(!$id) {
exit('没有提交参数!');
}elseif(inject_check($id)) {
exit('提交的参数非法!');
}elseif(!is_numeric($id)) {
exit('提交的参数非法!');
}
$id= intval($id);
return$id;
}
functionstr_check( $str) {
if(!get_magic_quotes_gpc()) {
$str= addslashes($str);// 进行过滤
}
$str= str_replace(_,\_,$str);
$str= str_replace(%,\%,$str);
return$str;
}
functionpost_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;
}
以上就介绍了最全防止sql注入方法,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
