PHP登录环节防止sql注入的方法浅析
发布:smiling 来源: PHP粉丝网 添加日期:2021-03-04 12:00:50 浏览: 评论:0
这篇文章主要介绍了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 username = "$username" and password = "$password"';
- $res = mysql_query($sql);
- if(mysql_num_rows($res)){
- header('Location:./home.php');
- }else{
- die('输入有误');
- }
注意上面的sql语句,存在很大的安全隐患,如果使用以下万能密码和万能用户名,那么可以轻松进入页面:
$sql = 'select * from test where username = "***" and password = "***" or 1 = "1"';
很明显,针对这条sql语句的万能密码是: ***" or 1 = "1
$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 = $password";
上面的注入至少已经不管用了,不过方法是一样的;
在使用PDO之后,sql注入完全可以被避免,而且在这个快速开发的时代,框架横行,已然不用过多考虑sql注入问题了。
下面整理了两个防止sql注册函数
- /* 过滤所有GET过来变量 */
- foreach ($_GET as $get_key=>$get_var)
- {
- if (is_numeric($get_var)) {
- $get[strtolower($get_key)] = get_int($get_var);
- } else {
- $get[strtolower($get_key)] = get_str($get_var);
- }
- }
- /* 过滤所有POST过来的变量 */
- foreach ($_POST as $post_key=>$post_var)
- {
- if (is_numeric($post_var)) {
- $post[strtolower($post_key)] = get_int($post_var);
- } else {
- $post[strtolower($post_key)] = get_str($post_var);
- }
- }
- /* 过滤函数 */
- //整型过滤函数
- function get_int($number)
- {
- return intval($number);
- }
- //字符串型过滤函数
- function get_str($string)
- {
- if (!get_magic_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;
- }
- ?>
Tags: PHP登录 防止sql注入
相关文章
- ·php中登录后跳转回原来要访问的页面实例(2014-01-06)
- ·PHP登录中的防止sql注入方法分析(2014-08-21)
- ·php实现简单用户登录功能程序代码(2015-04-11)
- ·php采用curl模仿登录人人网发布动态的方法(2021-04-24)
- ·PHP实现登录验证码校验功能(2021-09-17)
- ·PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例(2021-11-11)
- ·php实现登录页面的简单实例(2021-12-24)
- ·php安全,防止sql注入攻击简单方法(2014-08-23)
- ·php mysql防止sql注入详细说明(2014-08-25)
- ·最实用有效的PHP中防止SQL注入(2015-04-04)
- ·PHP中怎样防止SQL注入分析(2021-04-17)
- ·php防止sql注入之过滤分页参数实例(2021-04-21)
- ·php防止sql注入简单分析(2021-05-16)
- ·PHP简单实现防止SQL注入的方法(2021-09-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)