首页 » PHP教程 » php防注入过滤器技巧_浅谈PHP防注入

php防注入过滤器技巧_浅谈PHP防注入

访客 2024-11-11 0

扫一扫用手机浏览

文章目录 [+]

预备查询技能实际上是将不完全的SQL语句(如:select from xxx where id=?“?”是占位符)预先编译好,驻留于内存中,利用时不断将数据代入占位符并实行的一种技能。
利用这种技能本意是想快速运行多个格式相同的SQL语句,但由于语句已经编译好,以是代人数据时就不存在数据与语句相稠浊的情形,自然也就可以起到防注入的浸染。
预备查询技能是新版MySQLi库的亮点之一,在先容预备查询技能之前,先大略说说MySQLi。

一、运行环境

php防注入过滤器技巧_浅谈PHP防注入

1、MySQLi库可以链接4.1(含)以上版本的Mysql做事器。

php防注入过滤器技巧_浅谈PHP防注入
(图片来自网络侵删)

2、MySQLi库为PHP5.0(含)以上版本自带。

二、安装办法

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

三、改进

1.mysqli可以让程序员以面向工具的办法编写代码,为了做到这一点,可怜的php开拓者险些重写所有代码,在此向他们致敬。

2.mysqli库去掉了一些无用的函数,如:不支持持久连接等。

可以看出,mysqli作出了重大的改进,方便了程序员,下面开始先容预备查询技能。
预备查询技能须要七个环节,涉及六个函数,我们逐一为大家讲解。

首先先链接MySQL做事器,然后进行预备查询。

1、预备

函数原型:mysqli_stmt mysqli::prepare(string $query)

把稳:$query中要含有占位符,占位符可以占数字,文本等类型的数据,但是不能占表名,列名,数据库名等。
个中,当占位符占文本时,不要用引号(例如:该当为where username=?,而不是where username_'?')。
根据刚才的先容,此时就已经编译语句了,自然这里也会有语法检讨。

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等,无需此步和下一步。

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

其次,安装测试程序。
这个程序是我自己写的,意在解释意思,做得比较简陋,凑合看下。
安装方法见光盘。
下面进行测试,先测试第一套新闻系统。
从源代码看出,程序将变量直接带入SQL语句,造成注入,提交返回空缺页面。

提交:http://localhost/newsl/news.php?id=1 and 1=2 union select 1,user,pass fromadmin,返回后台地址。

用得到的用户名与密码登录后台(http://localhost/news1/admin)成功。

然后测试第二套系统。
从源代码看出,程序利用了预备查询技能,而且没有过滤,提交注入语句的非数字部分均被忽略(是由于绑定变量是类型定义为数字的缘故)以是无法注入。
通过测试可以看出,预备查询可以戒备注入攻击。
这样的技能应该引动身序员的重视!

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0