TypechoJoeTheme

EYblog - Powered by Eyblog

统计
登录
用户名
密码

郑先森灬

世上没有偶然,有的只是必然,正面面对困难,才能迈向成功。
网站页面
类目归类

【技术解读】PHP-SQL注入原理

SQL注入:

用户名:’ or 1 #
密码:随便写8位以上
验证码:写正确

概念

如果用户在填写表单或者其他数据的时候,通过一些特殊的数据形式,对SQL的行为作出了非法的影响,就叫作SQL注入!

基本原理

正常执行的sql语句:

select * from bg_admin where admin_name='zhouyang' and admin_pass=md5('12345678')

不正常执行的sql语句:

select * from bg_admin where admin_name='' or 1 #' and admin_pass=md5('123654uiykgjfhdsav')

由于#在sql语句中是注释符,所以,上面的SQL语句真正执行的是

select * from bg_admin where admin_name='' or 1

很显然,上面执行的结果就是where后面的条件永远为真!其实就相当于:

select * from bg_admin

其实,在这里可以进行sql注入的“用户名”还有很多,比如:

‘ or 1 or ‘

select * from bg_admin where admin_name='' or 1 or '' and admin_pass=md5('ewsdfgbnvb')

如何防止注入:

  1. 在业务逻辑上预防,比如要求用户名只能由特定的字符组成(比如数字字母下划线)(使用正则表达式)
  2. 使用PHP函数addslashes(最常用)strip_tags(trim($data)是防止JS注入的

    protected function escapeData($data) {
    return addslashes(strip_tags(trim($data)));
    }

  3. 使用MySQL提供的数据转义函数:mysql_real_escape_string($data,
    $link);不过有一个前提是必须连接上数据库之后才可以使用!
  4. 使用预处理技术,因为预处理是强制将sql语句的结构和数据部分分开!
赞(0)
版权属于:

EYblog - Powered by Eyblog

本文链接:

https://jwwey.com/index.php/archives/54/(转载时请注明本文出处及文章链接)

评论 (0)
郑先森灬
世上没有偶然,有的只是必然,正面面对困难,才能迈向成功。
23 文章数
59 评论量

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月