流星社区
免流教程
活动线报
编程源码
玩机美化
建议反馈
下载社区APP
登录
注册
首页
>
编程源码
>
【路人系列】浅谈PHP防注入(程序猿必看)
【路人系列】浅谈PHP防注入(程序猿必看)
楼主:
少羽✨
[3级]
· 2019-9-10 · 浏览1898 ·
编程源码
· ID:
13716
抱歉最近太忙了
没有更新自己都没时间练习渗透
某年某月某日某时某分某秒,某人在阅读某PHP程序代码时,发现某处将输入“直接”带入查询语句,当他兴冲冲地抄起阿D时,却没有注入点(magic_quotes_gpc为off)。当他仔细查看代码时,也没发现过滤语句,这是怎么回事呢?实际上,这个程序用了预备查询技术。预备查询技术为何方神圣,且听危险漫步给各位慢慢道来。
预备查询技术实际上是将不完整的SQL语句(如:select * from xxx where id=?“?”是占位符)预先编译好,驻留于内存中,使用时不断将数据代入占位符并执行的一种技术。使用这种技术本意是想快速运行多个格式相同的SQL语句,但由于语句已经编译好,所以代人数据时就不存在数据与语句相混淆的情况,自然也就可以起到防注入的作用。预备查询技术是新版MySQLi库的亮点之一,在介绍预备查询技术之前,先简单说说MySQLi。
- 版权声明 -
1、本帖所有言论和图片等纯属网友个人意见,与
流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者
少羽✨
和
流星社区
的同意;
3、备注原文地址:
https://bbs.liuxingw.com/t/13716.html
,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知
我们
,我们将及时予以处理。
8
0
29条回复
|
最后回复于2019-9-10
默认排序
默认排序
只看楼主
最新回复
热门回复
少羽✨
[3级]
已经习惯了,技术文章没人看
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
一、运行环境
1、MySQLi库可以链接4.1(含)以上版本的Mysql服务器。
2、MySQLi库为PHP5.0(含)以上版本自带。
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
二、安装方式
1、windows编辑php.ini,找到:;extension=php_mysqli,dⅡ这一行,去掉分号,保存,重启apache。
2、(类)unix如:(包括但不限于)mac os x,linux, unix等
重新编译php,加上–with-mysqli=/usr/local/mysql/bin/mysql_config
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
三、改进
1.mysqli可以让程序员以面向对象的方式编写代码,为了做到这一点,可怜的php开发者几乎重写所有代码,在此向他们致敬。
2.mysqli库去掉了一些无用的函数,如:不支持持久连接等。
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
可以看出,mysqli作出了重大的改进,方便了程序员,下面开始介绍预备查询技术。预备查询技术需要七个环节,涉及六个函数,我们一一为大家讲解。
首先先链接MySQL服务器,然后进行预备查询。
1、预备
函数原型:mysqli_stmt mysqli::prepare(string $query)
注意:$query中要含有占位符,占位符可以占数字,文本等类型的数据,但是不能占表名,列名,数据库名等。其中,当占位符占文本时,不要用引号(例如:应该为where username=?,而不是where username_’?’)。根据刚才的介绍,此时就已经编译语句了,自然这里也会有语法检查。
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
2、绑定变量 函数原型:bool mysqli_stmt::bind_param(string $types, mixed &$varl[, mixed&$…])注意:参数一为文本型,其中定义了各个占位符的类型,i是整型,d是浮点型,s是字符串型,b是blob(例如,预备查询语句中有四个占位符,类型分别是字符串型、字符串型、字符串型、整型,则该参数为:”sssi”)。剩下的参数按顺序依次对应预备查询语句中的占位符,变量不需要提前定义。 3、赋值 为第二步中的变量赋值 4、执行 函数原型:bool mysqli_stmt::execute(void) 5、绑定结果 函数原型:bool mysqli_stmt::bind_result (mixed &$varl[,mied&$…]) 注意:参数要一一与返回的字段对应,对于无返回数据的查询,如delete,insert等,无需此步和下一步。
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
6、处理数据 函数原型:bool mysqli_stmt::fetch(void) 注意:此函数无需参数,其功能是将指针处的数据赋给上一步中绑定的变量,并将指针下移 一行,如果指针处没有数据可供返回,函数返回false。由于数据可能有很多条,就得需要用循环处理。 7、关闭查询 函数原型:bool mysqli_stmt::close(void) 还需要关注的一点是,如果想执行多条语句,可以重复3-6步,即重新赋值,再execute一遍。 最后断开链接: 函数原型:bool mysqli::close(void) 以上就是预备查询的基本理论,理论还得靠实践来检验,下面对两份程序进行测试,首先介绍测试环境: B:Safari 5.0(6533.16)on MAC OS X10.6.4 S:Apache/2.2.15 PHP/5.3.2 mysql-5.5-m2-osx10.6-x86_64 MAC OS X10.6.4
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
少羽✨
[3级]
其次,安装测试程序。这个程序是我自己写的,意在说明意思,做得比较简陋,凑合看下。安装方法见光盘。下面进行测试,先测试第一套新闻系统。从源代码看出,程序将变量直接带入SQL语句,造成注入,提交返回空白页面。
提交:http://localhost/newsl/news.php?id=1 and 1=2 union select 1,user,pass fromadmin,返回后台地址。
用得到的用户名与密码登录后台(http://localhost/news1/admin)成功。
然后测试第二套系统。从源代码看出,程序使用了预备查询技术,而且没有过滤,提交注入语句的非数字部分均被忽略(是因为绑定变量是类型定义为数字的缘故)所以无法注入。通过测试可以看出,预备查询可以防范注入攻击。这样的技术应当引起程序员的重视!
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
北港
[2级]
可以
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
华霜
[1级]
发布于2019-9-10
0
0
回复
回复列表
默认排序
默认排序
最新回复
内容加载中...
说点什么...
回复
收起楼层
1
2
3
下一页
登录
注册
后才可进行评论
签到
已签到
26人签到
已签0天
48673
帖子
1966813
热点量
198167
火热值
登录
注册
返回首页
编程源码
在线星友(1)
友情链接
优惠券线报
大流量卡免费办
流量消失器
乐趣图床
ChatGPT问答
测网速
乐趣云API接口
乐云挂机助手
ChatGPT独享号
游魂博客
人生重开模拟器
制作收款码
IP属地查询
流星社区交流群
RSS订阅服务