《php登录中的防止sql注入方法分析_.docx》由会员分享,可在线阅读,更多相关《php登录中的防止sql注入方法分析_.docx(5页珍藏版)》请在三一文库上搜索。
1、php登录中的防止sql注入方法分析_ 防止sql注入这些详情问题一般是消失在大意程序员或者是新手程序员了,他们未对用户提交过来的数据进行一些特别过滤从而导致给大家测试一下就攻破了你的数据库了,下面我来简洁的一个用户登录未进行平安配置可能消失的sql注入方法,下面一起来看看吧。 比如以下一段登录的代码: 代码如下: if($l = mysql_connect(localhost, root, 123) or die(数据库连接失败); mysql_select_db(test); mysql_set_charset(utf8); $sql = select * from test where
2、username = $username and password = $password; $res = mysql_query($sql); if(mysql_num_rows($res) header(location:./home.php); else die(输入有误); 留意上面的sql语句,存在很大的平安隐患,假如用法以下万能密码和万能用户名,那么可以轻松进入页面: 代码如下: 1. $sql = select * from test where username = * and password = * or 1 = 1; 很明显,针对这条sql语句的万能密码是: * or 1
3、 = 1 代码如下: 2. $sql = select * from test where username =* union select * from users/* and password = *; 正斜线* 表示后面的不执行,mysql支持union联合查询, 所以挺直查询出全部数据; 所以针对这条sql语句的万能用户名是:* union select * from users/* 但是,此注入只针对代码中的sql语句,假如 代码如下: $sql = select * from test where username = $username and password = $passw
4、ord; 上面的注入至少已经不管用了,不过方法是一样的; 在用法pdo之后,sql注入完全可以被避开,而且在这个快速开发的时代,框架横行,已然不用过多考虑sql注入问题了。 下面整理了两个防止sql注册函数 代码如下: /* 过滤全部get过来变量 */ foreach ($_get as $get_key=gt;$get_var) if (is_numeric($get_var) $getstrtolower($get_key) = get_int($get_var); else $getstrtolower($get_key) = get_str($get_var); /* 过滤全部pos
5、t过来的变量 */ foreach ($_post as $post_key=gt;$post_var) if (is_numeric($post_var) $poststrtolower($post_key) = get_int($post_var); else $poststrtolower($post_key) = get_str($post_var); /* 过滤函数 */ /整型过滤函数 function get_int($number) return intval($number); /字符串型过滤函数 function get_str($string) if (!get_magi
6、c_quotes_gpc() return addslashes($string); return $string; 还有一些博客会这样写 代码如下: ?php 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; ? .