欢迎来到天天文库
浏览记录
ID:41298231
大小:235.00 KB
页数:33页
时间:2019-08-21
《Web编程常见漏洞与检测》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Web编程常见漏洞与检测By:Neeao2008.9.21Web漏洞检测白盒检测对检测者的要求:——能读懂用此语言写的程序——明白漏洞成因——漏洞挖掘经验常用的web脚本语言:Asp/Php/Jsp/asp.net常见的web漏洞sql注入文件上传cookie欺骗XSS攻击文件包含其他Sql注入及其危害所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通过递交参数构造巧妙的SQL语句,从而成功获取想要的数据。分为字符型注入和数字型的注入,由于编程语言不同,所存在的注
2、入类型也不同。危害:--非法查询其他数据库资源,如管理员帐号。--执行系统命令--获取服务器root权限Sql注入原理Test.asp文件代码片段:sqlStr=“select*fromn_userwhereusername=‘”&username&”’andpassword=‘“&password&”’rs=conn.execute(sqlStr)正常的查询:test.asp?username=test&password=123sqlStr=“select*fromn_userwhereusername=‘test’andpassword=‘
3、123’“使password=123‘or‘1’=‘1:Sql语句到数据库后:sqlStr=“select*fromn_userwhereusername=‘test’andpassword=‘123’or‘1’=‘1’“Or‘1’=‘1’始终成立。Asp表现存在数字型和字符型注入。(A)数字型字段=51Select*from表名where字段=51构造参数:ID=49And[查询条件]生成语句:Select*from表名where字段=49And[查询条件](B)字符型的另一种形式搜索语句:Select*from表名where字段like’%
4、关键字%’构造参数:keyword=’and[查询条件]and‘%25’=’生成语句:Select*from表名where字段like’%’and[查询条件]and‘%’=’%’Asp注入的预防对于用户端输入的任意字符,包括GET提交,POST提交,Cookie提交,SERVER提交的都需要做严格过滤。对于数字型参数判断是否为数字:可用函数isNumeric来判断,返回值为true和false。对于字符型参数过滤单引号,使其无法闭合当前sql语句的单引号。例外:base64编码Sql通用防注入Php中的表现Php的魔术引号(magic_quot
5、es_gpc)。php.ini-dist默认是开启此功能。如果安装php时使用此文件,将不会产生字符型注入,主要是数字型注入。数字型注入:select*fromguesswhereid=“.$id.”select*fromguesswhereid=$idGPC不起作用的情况数组$userid=$_POST[userid'];for($i=0;$i6、编码后的单引号:Jw==mysql处理GBK编码字符%bf%27导致单引号被绕过的问题。其他数据库,如mssql。对于转义符反斜杠作为字符处理的。select*fromtestwheretitle='aaa'or'1'='1‘Php注入的预防(一)确认GPC开启,若没开启则用addslashes函数过滤之,如下代码。if(!get_magic_quotes_gpc()){ $lastname=addslashes($_POST['lastname']);}else{ $lastname=$_POST['lastname'];7、}对于数字型参数可使用intval或floatval强制转换为数字型。注意mysql的版本以及默认字符集,Mysql>4.1字符集连接字符串:mysql_query("SETcharacter_set_connection=$dbcharset,character_set_results=$dbcharset,character_set_client=binary;");Php注入的预防(二)Php5以上版本Mysqli扩展预防,参数化查询$city="Amersfoort";/*createapreparedstatement*/$st8、mt=$mysqli->prepare("SELECTDistrictFROMCityWHEREName=?")$stmt->bind_param("
6、编码后的单引号:Jw==mysql处理GBK编码字符%bf%27导致单引号被绕过的问题。其他数据库,如mssql。对于转义符反斜杠作为字符处理的。select*fromtestwheretitle='aaa'or'1'='1‘Php注入的预防(一)确认GPC开启,若没开启则用addslashes函数过滤之,如下代码。if(!get_magic_quotes_gpc()){ $lastname=addslashes($_POST['lastname']);}else{ $lastname=$_POST['lastname'];
7、}对于数字型参数可使用intval或floatval强制转换为数字型。注意mysql的版本以及默认字符集,Mysql>4.1字符集连接字符串:mysql_query("SETcharacter_set_connection=$dbcharset,character_set_results=$dbcharset,character_set_client=binary;");Php注入的预防(二)Php5以上版本Mysqli扩展预防,参数化查询$city="Amersfoort";/*createapreparedstatement*/$st
8、mt=$mysqli->prepare("SELECTDistrictFROMCityWHEREName=?")$stmt->bind_param("
此文档下载收益归作者所有