1 / 30
文档名称:

PHP代码安全性的规范.docx

格式:docx   大小:260KB   页数:30页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

PHP代码安全性的规范.docx

上传人:miao19720107 2020/9/10 文件大小:260 KB

下载得到文件列表

PHP代码安全性的规范.docx

相关文档

文档介绍

文档介绍:PHP代码安全性的规范SQL注入概念所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。危害查询数据库中敏感信息。绕过认证。添加、删除、修改服务器数据。拒绝服务。?id=(BENCHMARK(,MD5(RAND()));,被置为off开发者没有对数据类型进行检查和转义第二点最为重要?因为如果没有第二点的保证,magic_quotes_gpc选项,不论为on,还是为off,都有可能引发SQL注入攻击。例子magic_quotes_gpc=Off时的注入攻击magic_quotes_gpc=Off是php中一种非常不安全的选项。新版本的php已经将默认的值改为了On。但仍有相当多的服务器的选项为off。当magic_quotes_gpc=On 时,它会将提交的变量中所有的'(单引号)、"(双号号)、\(反斜线)、空白字符,都为在前面自动加上\。下面是php的官方说明:PC(Get/Post/Cookie) magic_quotesareon,all'(single-quote),"(doublequote),\ (backslash)andNUL'sareescapedwithabackslashautomatically 如果没有转义,即off情况下,就会让攻击者有机可乘。当用户输入正常的用户名和密码,假设值分别为zhang3、abc123,则提交的SQL语句如下:SELECT*FROMtbl_usersWHEREusername='zhang3'ANDpassword='abc123'LIMIT0,1 如果攻击者在username字段中输入:zhang3'OR1=1#,在password输入abc123,则提交的SQL语句变成如下:SELECT*FROMtbl_usersWHEREusername='zhang3'OR1=1#'ANDpassword='abc123'LIMIT0,1 由于#是mysql中的注释符,#之后的语句不被执行,实现上这行语句就成了:SELECT*FROMtbl_usersWHEREusername='zhang3'OR1=1 这样攻击者就可以绕过认证了。如果攻击者知道数据库结构,那么它构建一个UNIONSELECT,那就更危险了: 假设在username中输入:zhang3'OR1=1UNIONselectcola,colb,coldFROMtbl_b# 在password输入:abc123, 则提交的SQL语句变成:SELECT*FROMtbl_usersWHEREusername='zhang3'OR1=1UNIONselectcola,colb,coldFROMtbl_b#'ANDpassword='abc123'LIMIT0,1 这样就相当危险了。magic_quotes_gpc=On时的注入攻击当magic_quotes_gpc=On时,攻击者无法对字符型的字段进行SQL注入。这并不代表这就安全了。这时,可以通过数值型的字段进行SQL注入。,已经严格了数据类型的输入,已默认关闭自动类型转换。数值型的字段,不能是引号标记的字符型。也就是说,假设uid是数值型的,在以前的mysql版本中,这样的语句是合法的:INSERTINTOtbl_userSETuid="1";SELECT*FROMtbl_userWHEREuid="1";,上面的语句不是合法的,必须写成这样:INSERTINTOtbl_userSETuid=1;SELECT*FROMtbl_userWHEREuid=1;那么攻击者在magic_quotes_gpc=On时,他们怎么攻击呢?很简单,就是对数值型的字段进行SQL注入。一个正常的语句,用户输入1001和abc123,提交的sql语句如下:SELECT*FROMtbl_usersWHEREuserid=1001ANDpassword='abc123'LIMIT0,1 如果攻击者在userid处,输入:1001OR1=1#,则注入的sql语句如下:SELECT*FROMtbl_usersWHEREuserid=1001OR1=1#ANDpassword='abc123'LIMIT0,1 攻击者达到了目的。解决方法如何防止phpsql注入攻击?我认为最重要的一点,就是要对数据类型进行检查和转义。总结的几点规则如下:1)、,应该设为 display_errors=off。这样php脚本出错之后,不会