hp中sql注入与跨站攻击的防范

hp中sql注入与跨站攻击的防范

ID:24959382

大小:69.69 KB

页数:3页

时间:2018-11-17

hp中sql注入与跨站攻击的防范_第1页
hp中sql注入与跨站攻击的防范_第2页
hp中sql注入与跨站攻击的防范_第3页
资源描述:

《hp中sql注入与跨站攻击的防范》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、PHP中SQL注入与跨站攻击的防范SQLinjection即SQL注入是我们每个WEB程序员都需要面对的问题,一个WEB应用假如没有起码的安全性,那么其它的一切就可以免谈了。注入问题在ASP上可谓是闹得沸沸扬扬,当然还有不少PHP程序“遇难”。至于SQLinjection的详情,网上的文章很多,在此就不作赘述。追其罪恶之源,就是我们误以为用户提交的数据是可靠的。   无论你是否有足够的PHP安全开发经验,本文的目的就是用来帮助你构建更为安全的在线应用程序。针对不同的情况,我们可以使用下面的一种或几种方法来对SQL注入的风险进行预防。   1

2、、在书写SQL语句时不要省略单引号,即使是整型字段也应该加上单引号。   首先,从技术上讲,引号对于数字值来说是不需要使用的。但是,假如你不使用引号把例如书籍数量这样的一个值括起来,并且假如你的用户把一个空值输入到你的表单中,那么,你将会看到一个类似下面的查询:SELECT*FROMbooksWHEREnum=   当然,这个查询从语法上讲是无效的;但是,下面的语法却是有效的:SELECT*FROMbooksWHEREnum=''   第二个查询虽然也不会返回任何结果,但是至少它不会返回一个错误消息。   其次,单引号可以增加注入者的难度,

3、第二句由于把变量放在一对单引号中,这样使得我们所提交的变量都变成了字符串,即使包含了正确的SQL语句,也不会正常执行,而第一句不同,由于没有把变量放进单引号中,那我们所提交的一切,只要包含空格,那空格后的变量都会作为SQL语句执行,因此,我们要养成给SQL语句中变量加引号的习惯。   2、检查用户提交的值的类型,对接收到的整型参数使用intval()强制转换成整形。   我们知道SQL注入的主要来源往往出在一个意料之外的表单提交或URL参数中,所以当你接受一个由用户提交的参数时,你应该有相当的权利来确定你想取得什么样的输入内容。在以前的学习

4、中我们已经讨论过很多这样或那样的校验问题。因此我们只要简单的总结当时我们讨论的要点即可比较轻易的检查用户提交数据的有效性。假如你期望得到的是一个数值,那么你可以使用下面这些技术之一来确保你得到的参数的安全性。使用is_int()函数(或is_integer()或is_long())。使用gettype()函数。使用intval()函数。使用settype()函数。   我们通常把传送过来的整型参数使用intval()函数强制转换成整形,因为假如不这样做,接收到的查询子句很可能会附带着其它一些我们并不愿看到的语句,比如原本应该是“nid=17

5、”可能会成为“nid=17or1=1”,这会使我们预计的SQL语句变成这样:SELECT*FROMnewsWHEREnid=17or1=1这对于一个新闻表中的信息可能不会造成什么大的危害,但假如是在显示某个用户的信息时呢?   此外,为了检查用户输入内容的长度,你可以使用strlen()函数。为了检查一个期望的时间或日期是否有效,你可以使用strtotime()函数。它似乎一定能够确保一位用户的提交参数中没有包含分号字符(除非标点符号可以被合法地包括在内)。你可以借助于strpos()函数轻易地实现这一点,如下所示:if(strpos($v

6、ariety,';'))exit("$varietyisaninvalidvalueforvariety!");正如我们在前面所提到的,只要你仔细分析你的用户输入期望,那么,你应该能够很轻易地检查出其中存在的许多问题。   3、使用mysql_real_escape_string()函数从查询字符串中过滤掉危险字符   尽管有很多文章已经讨论过如何过滤掉危险字符的问题,但是在本文中还是让我们再次简单的强调并归纳一下这个问题:   不要使用magic_quotes_gpc指令或它的搭挡addslashes()函数,此函数在程序开发中应该是被限

7、制使用的,在PHP的下一个版本PHP6中已经取消了对此函数的支持,并且此函数还要求使用额外的步骤stripslashes()函数。相比之下,mysql_real_escape_string()函数更为适合,受此函数影响的字符包括:x00,,r,,',",x1a。这二个函数的功能类似,但addslashes()函数无法转换以十六进制形式提交的字符,另外需要注重的是,mysqli_real_escape_string()函数需要先建立数据库连接,因为需要考虑到连接的当前字符集,通常防止数据库被攻击的使用方法如下:

8、ioncheck_input($value){//去除斜杠if(get_magic_quotes_gpc()) { $value=stripslashes($value); }/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。