PHP:测试SQL注入以及防止SQL注入
2024-09-06 14:26:31
在写登录注册的时候发现了SQL和JS注入这个危害网站的用户举动:
测试方法:
SQL注入:
先来做一个测试:
用户名:’ or 1 #
密码:随便写8位以上
验证码:写正确
好吧,就那么简单就进去了:
概念
如果用户在填写表单或者其他数据的时候,通过一些特殊的数据形式,对SQL的行为作出了非法的影响,就叫作SQL注入!
基本原理
正常执行的sql语句:
select * from bg_admin where admin_name='zhouyang' and admin_pass=md5('')
不正常执行的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
也就是说,只要bg_admin表中有正常的管理用户,就可以查询到数据!
其实,在这里可以进行sql注入的“用户名”还有很多,比如:
‘ or 1 or ‘
select * from bg_admin where admin_name='' or 1 or '' and admin_pass=md5('ewsdfgbnvb')
特别强调:
1, 不仅仅是在用户登录的时候,SQL语句可以被注入,其他任何用户的数据只要参与执行,都有可能被注入!
2, SQL注入的危害非常之大,有时候甚至可以删除服务器上的整个数据库:
比如:
用户名为:' or 1;drop database php2010;#
注意:
MySQL数据库默认的有information_schema,所有数据库的名称等信息都存放在里面,这些数据库很容易获取到默认数据库的名字!
解决方案
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语句的结构和数据部分分开!
最新文章
- github提交代码时,报permission denied publickey
- zigbee学习之路(十四):基于协议栈的无线数据传输
- http学习笔记(二)—— 嘿!伙计,你在哪?(URL)
- php像新浪微博一样生成短域名
- bzoj 1856: [Scoi2010]字符串
- mysql基础操作整理(一)
- MVC form post 传值
- bzoj3574[Hnoi2014]抄卡组
- 23个phpcms v9模板制作及二次开发常用代码案例
- Lowest Common Ancestor of a Binary Search Tree、Lowest Common Ancestor of a Binary Search Tree
- C#:判断当前程序是否通过管理员运行
- iScroll 4.2.5 中文API
- [0] 自定义特性AttributeUsage
- Python 爬虫基础Selenium
- android自动化必备之SDK
- spring深入学习(一)-----IOC容器
- 用ffmpeg把视频编码格式转为h.264
- HDMI驱动热插拔检测方法
- hibernate项目
- Only IPV6 下 使用MSDTC ping 之后 出现 找不到主机的问题
热门文章
- 编码格式简介(ANSI、GBK、GB2312、UTF-8、UTF-16、GB18030和 UNICODE)
- Hibernate-HQL-Criteria-查询优化
- there is no permission with id `12`
- vim编辑器操作①
- python 3.0读取文件出现编码错误(illegal multibyte sequence )
- NSIS之MUI
- JavaScript类型转换规则
- GYM 101350 F. Monkeying Around
- UE4物理模块(三)---碰撞查询(下)SAP/MBP/BVH算法简介
- 模拟15 题解(waiting)