• 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 3

    PHP中一个简单方法防止sql注入

    Posted by 撒得一地 on 2015年12月5日 in PHP笔记
    国外稳定加速器推荐    Express | Vypr

    本文将会教你如何在PHP中防止Mysql注入,并提高你在PHP脚本和Mysql语法书写时的安全性。

    什么是SQL注入?

    SQL注入是指在你系统防御之外,某人将一段Mysql语句注入到你的数据库。注入通常发生在系统要求用户输入数据的时候,比如用户名的输入,用户可能输入的不是一个用户名,而是一段SQL语句,这个语句可能就会不知不觉地运行在你的数据库中。

    SQL注入实例

    $name = $_POST['username'];
    
    $query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";
    

    如同你看到的,用户输入的值会通过url参数分配给变量$name,然后直接放置到sql语句中。这意味着用户是有可能编辑sql语句的。

    $name = "admin' OR 1=1 -- ";
    
    $query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";
    

    sql数据库最后会接收到下面的这一段sql语句:

    SELECT * FROM `tbl_name` WHERE `name`='admin' OR 1=1 --'
    

    在Mysql中- -表示忽略掉后面所有的内容,就是注释掉后面所有内容。这是有效的SQL语句,而且执行结果不是返回当前用户数据,而是将返回所有数据表(table_name)中的所有数据。这是任何人都不希望在他们的web应用程序中出现。下面将会教你如何防止这种类型的漏洞。

    那么,如何简单防止Mysql注入?

    这个问题已经被知道了一段时间,PHP有一个特制的功能以防止这些攻击。所有你需要做的就是使用一个函数mysql_real_escape_string()。

    mysql_real_escape_string所做的是把一个输入的字符串,在MySQL查询时将它处理为用户输入的真实字符串,来防止SQL注入。有点绕,基本上,就是将用户输入可能引起Mysql安全隐患的字符串比如单引号('),用逃脱引用来表示\ '。

    将这个函数应用到上面那个可能被注入的例子中:

    $name = mysql_real_escape_string($_POST['username']);
    
    $query = "SELECT * FROM `tbl_name` WHERE `name` = '$name' ";
    

    这里要十分小心的是,mysql_real_escape_string要先成功地通过mysql_connect连接到mysql server上以后才能正常使用,如果数据库
    还没连接直接使用这个函数会报错。上面经过函数转化后,$query最后打印出来的语句为:

    SELECT * FROM `tbl_name` WHERE `name`='admin\' OR 1=1 -- '
    

    也就是说上面那个admin后面的单引号(')被转义为真实的输入字符,不再和admin前的字符进行匹配,admin前的单引号将和字符串–后面的单引号进行匹配。

    让我们创建一个通用的函数,你可以用任何名字来命名它,在这里,我要将它命名为"mres":

    function mres($var){
        if (get_magic_quotes_gpc()){
            $var = stripslashes(trim($var));
        }
        return mysql_real_escape_string(trim($var));
    }
    

    现在,可以把函数简化成下面这个样子:

    $name = mres($_POST['username']);
    
    $query="SELECT * FROM `tbl_name` WHERE `name`='$name' ";
    

    转载请注明链接://www.cfage.com/1207.html

    标签:,

    上一篇:

    下一篇:

    相关推荐

    3 Comments

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    0 + 9 = ?

    网站地图|广东快乐10分开奖直播

    Copyright © 2015-2019 广东快乐10分开奖直播 All rights reserved.
    闽ICP备15015576号-1,版权所有?psz.

  • 周蓬安.blog的博客—强国博客—人民网 2019-05-10
  • 紫光阁中共中央国家机关工作委员会 2019-05-10
  • 感触名家笔下的端午文化吃香粽原来可以这样文艺 2019-05-09
  • 追梦夺冠游行嘲讽詹皇 百万人面前穿订制T恤羞辱他 2019-04-27
  • 《瘟疫传说》:黑死病恐怖 姐弟在绝望中求生 2019-04-10
  • 陕西国防工业职业技术学院百名大学生志愿者敬老院慰问孤寡老人陕西国防工业职业技术学院百名大学生志愿者敬老院慰问-陕西教育新闻 2019-04-08
  • 西藏拉萨:新家园 新生活 2019-04-08
  • 尊重和保障宗教信仰自由的中国实践 2019-04-06
  • 一敬泯恩仇 俄罗斯队主帅这个动作太暖了 2019-03-20
  • 四大名著剧组首次同台忆往事 经典影视剧如何铸就? 2018-12-07
  • “天眼”凝望 探秘宇宙 2018-12-07
  • 14场足彩胜负彩全中有多少钱 排列5开奖 金凤彩票论坛 北京pk10技巧公式 中国足球竟彩实时比分 大乐透17052期博客分析 时时彩十期倍投方案 秒速飞艇开奖网站 山东时时彩11夺金 山西开乐彩网 北单4串1经典过滤技巧 全国联网排列五走势图浙江风采 澳洲幸运8彩票 pk10不定位5码技巧 双色球开奖结果查询 赛车现场直播