本文实例讲述了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程序设计有所帮助。