本文实例讲述了php简单实现sql防注入的方法。分享给大家供大家参考,具体如下:
这里没有太多的过滤,主要是针对php和mysql的组合。
一般性的防注入,只要使用php的 addslashes 函数就可以了。
以下是一段copy来的代码:
PHP代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$_POST = sql_injection( $_POST );
$_GET = sql_injection( $_GET );
function sql_injection( $content )
{
if (!get_magic_quotes_gpc()) {
if ( is_array ( $content )) {
foreach ( $content as $key => $value ) {
$content [ $key ] = addslashes ( $value );
}
} else {
addslashes ( $content );
}
}
return $content ;
}
|
做系统的话,可以用下面的代码,也是copy来的。
PHP代码:
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
|
function inject_check( $sql_str ) {
return eregi ( 'select|insert|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()) { // 判断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()) { // 判断magic_quotes_gpc是否为打开
$post = addslashes ( $post ); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post = str_replace ( "_" , "\_" , $post ); // 把 '_'过滤掉
$post = str_replace ( "%" , "\%" , $post ); // 把 '%'过滤掉
$post = nl2br ( $post ); // 回车转换
$post = htmlspecialchars( $post ); // html标记转换
return $post ;
}
|
希望本文所述对大家PHP程序设计有所帮助。