为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[doc格式] 也谈PHP程序SQL注入防范

2018-03-01 8页 doc 21KB 23阅读

用户头像

is_633423

暂无简介

举报
[doc格式] 也谈PHP程序SQL注入防范[doc格式] 也谈PHP程序SQL注入防范 也谈PHP程序SQL注入防范 适合读者:网管脚本爱好者 前置知识PHP .CLUB liuliu(~hackercorn.)栏目编辑)刘流)cl?誓 也谈PHP程序 SQL注入防范 文/图非零解&周琳 目前,PHP安全问题已经成为PHP领域的一 个热门话题.要想确定脚本是安全的,必须从 最基本之处开始——一输入的过滤和安全的输 出.如果不充分的做好这些基本工作的话,你 的脚本将会一直存在安全问题.本文将从输入 的过滤讨论对PHP程序的SQL注入的...
[doc格式] 也谈PHP程序SQL注入防范
[doc格式] 也谈PHP程序SQL注入防范 也谈PHP程序SQL注入防范 适合读者:网管脚本爱好者 前置知识PHP .CLUB liuliu(~hackercorn.)栏目编辑)刘流)cl?誓 也谈PHP程序 SQL注入防范 文/图非零解&周琳 目前,PHP安全问题已经成为PHP领域的一 个热门话题.要想确定脚本是安全的,必须从 最基本之处开始——一输入的过滤和安全的输 出.如果不充分的做好这些基本工作的话,你 的脚本将会一直存在安全问题.本文将从输入 的过滤讨论对PHP程序的SQL注入的防范. 对字符型注入的防范 当脚本的输入出自于其他地方,输入肯定 是不安全的.常见的危险脚本有$一P0ST, $一 GET,$一REQUEST;~EI$一SERVER.这些都是看起 来安全,实际上都存在一定危险的隐患.面对 这些外来脚本,在做进一步的工作之前,你首 先要做的是使它合法化,同时有效的过滤它. 确认脚本里面包含有你需要的就足够了.就像 如果你想申请一个电子邮箱,仅仅只需要确定 它是一个有效的电子邮箱就行.下面举个例子 进行说明. 通过检查这些数据,我们要尽可能拒绝将 危险的数据写入脚本里面.即使我们可以确定 数据是比较安全的了,也不代表着工作就完成 了.我们还需要确定它被插入的时候也是安全 的.PHP有一个函数,mYSqI—reaI一 . 符串中的特殊字符. LImT y 中 ing 考虑到了连接的当前字符集,用法为:String mysql—— re&l_esc&pe_string(stringunesc&ped——string[,resour ce link—identifier]),其功能是将unesc&ped—string中的特 殊字符转义,并计算连接的当前字符集,因此 可以安全用于mysql_query(),mysql—re&l_esc&pe—string ()并不转义”%”和”一”. 因此,上面的例子,我们可以把它转换成 如下形式. 现在这些数据就完全安全了,可以放心地 插入数据库.为了避免一些错误和增加代码的 可读性,我们通常会对其加前缀. 用这种的话,它总是以固定的前缀 “d一 “出现.当你插入一个危险的数据时,.也可以使 用mysql—escape_string().~mysql可用addslashes ().同样可以把用户提交上来的非数字数据进 行转义(使用方法与mysqI_real—escape—string() 类似).如果字符串中只允许字母数字.可使 用函数ctype—alnum(). ctype_ 8,嘉鬟 (stringUnescaped—String);.口果字符串 unescs,ped_string..~_.X包含字母或数字,这个函数 就会返回TrUe. 对数字型注入的防范 上面的过滤可以防止字符型注入.对于数 字型的注入.我们可以用其他的函数来对提交 的数据进行检查或者处理.以下面的SQL语句 为例,SQL语句对userid没有经过任何过滤就可 以被构造SQL注入. 在这里的uSerid是接受数字用的,可以用 iSint(),iS—integer(),is,Iong(),is,numeric ()和ctype—digit()等函数判断接受的数据是不 是数字. . 如果vs,r是integer则返回TI~UE,否则返~FALSE. 2.is—numeric()函数,用法为boolis—numeric (mixed$var).如果变量是数字,或者是包含数 字及符号,小数点,指数的字符串,这个函数 就会返回TrUe. 5.ct~e_digit()函数,用法)bctype一~gil;($string). 如果字符串里只包含字符”0”到”9”,函数 就会返回TrUe.注意,不允许有小数点. 先前的例子经过以上函数is—numeric()处理 后.我们把它转换成这样: 上面的S—userid表示数据是安全的,增加了 代码的可读性(虽然我在编写程序的时候也时 常忘记这样,但是很值得推荐).这样用判断 数字的函数有效地检查了输入的数据.我们还 可以在程序中使用类型设置函数SettYPe()和 intval()把输入的数据转换成数字. 使用函数SettYPe()来处理上面输入的数 据.可以采用下面的形式. … 1.in . tvs,l()~蝴 $bs,se])o~It” 进制转换(默认十进制),返回变量Var的数 值.var可以是任何标量类型.in~;vs,l()不能用于 8,rrs,y或object.注意,除~Izvs,r参数是字符串,否 则intvs,I()的base参数不会有效果. 2.~ttype()函数,用法为boolsettype(mixed$var, string$type).将变量vs,r的类型设置成type.type的 可能值为”boolean”(或为”bool”,PHP4.2.0以 上),”integer”(或为”int”,PHP4,2.0以 上),”fIos,t”(只在PHP4.2,0之后可以使 用,对于旧版本中使用的”d0UbIe”现已停用), 如果成功则返回TEUE,失败则返~FALSE. 编写过滤输入的西致 用PHP本身的函数就把输入过滤得很严格. 但是在实际编写代码的时候.会有很多的问题 出现.比如我们必须考虑每个变量用什么函数 来过滤.这要建立一个安全的抽象层.能自动 的过滤输入.就可以把过滤的方法建立在一个 函数或者封装在一个类里面. 在PHP中.一般常用两个函数对字符型的输 II霆l;阻,03羹北京市保安总公司网络安全保安分公司协办 „CLU liuliuhackercQm 日 ca誓>栏目编辑>刘流>@i强鲑盈_一????盏置??溷 入进行过滤addsIashes()和mYsqI—reaI— escaPe—string().这两个函数适用于不同的 PHP版本,mysql—real—escape—string()是PHP>=4, 3.0中才开始使用.对于PHP+MYSOL编写的程 序,我们不知道用户使用的PHP版本的话,可以 写函数进行相应的判断. 我们用上面编写的sqI—quote()函数对输入 的字符串进行过滤 没有使用整个函数的时候,我们可以用 OR1=1绕过用户的验证,SQL语句变为: 使用sqI—quote()函数后SOL语句变为 „从而使得这条语句变安全了,攻击者单从 这条语句绕过验证的话就不可能了. 本文主要讨论了PHP对SOL注入攻击的防 范,参考了<<PHPSecurityBasicPHPSecurity 及其他文章,经过翻译整理后而成.如果读者 :有兴趣的话,可以翻看原文((PHPSecurity: BasicPHPSecurity)),地址为 net/article/php,security—basic/.J j适合 前盘 .童一 豢,曩 读者网管一 知识:无 ? _ l:利用ARPKiller 轻松突破网络执法官 更一,k&w&ru999 网络执法官是一款网管软件,可用于管理 局域网,能禁止局域网任意机器连接网络.对 于网管来说,这个功能自然很不错,但如果局 域网中有别人也使用该功能那就麻烦了.因为 这样轻则会导致别人无法上网,重则会导致整 个局域网瘫痪.有什么解决办法呢7那就看看 下面的招数和实现原理吧. 网络抻法官简介 我们可以在局域网中任意,台机器上运行 网络执法宫的主程序NetRobocop.exe.它可以穿 透防火墙,实时监控,记录整个局域网用户上 线情况,可限制各用户上线时所用的jP,时段. 并可将非法用户踢下局域网.该软件适用范围 为局域网内部,不能对网关或路由器外的机器 进行监视或管理,适合局域网管理员使用. 在网络执法官中,要想限制某台机器上 网只要点击网卡”菜单中的权限”,选 择指定的网卡号或在用户列表中点击该网卡所 在行,从右键菜单中选择”权限”,在弹出的 北京市保安总公司网络安全保安分公司协办www.ha 200803.骶圈?爨客防线鼍融盟?一 一纛
/
本文档为【[doc格式] 也谈PHP程序SQL注入防范】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索