《Web应用编码与安全功能要求实例分析及WEB安全防护重点课件》由会员分享,可在线阅读,更多相关《Web应用编码与安全功能要求实例分析及WEB安全防护重点课件(30页珍藏版)》请在金锄头文库上搜索。
1、1,Web应用编码与安全功能要求实例分析及WEB安全防护重点,二一一年七月,中国电信股份有限公司北京研究院 常力元,培训提纲,SQL,SQL注入及其危害,所谓SQL注入,就是通过把SQL命令插入到Web表单递交或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 分为字符型注入和数字型的注入,由于编程语言不同,所存在的注入类型也不同。 由于使用编程语言和数据库的不同,漏洞的利用以及所造成的危害也不同。 危害: -非法查询、修改、删除其他数据库资源 -执行系统命令 -获取服务器root权限,Sql注入原理,Test.asp文件代码片段: sqlStr = “select * from
2、 n_user where username=” for($i=0;$icount($ userid);$i+) $query=“select * from user where i_hid=.$ userid$i.; 编码函数引起 base64_decode,base64编码后的单引号:Jw= mb_convert_encoding/iconv函数处理中文字符%bf%27导致的问题。 其他数据库,如ms sql。对于转义符反斜杠作为字符处理的。 select * from test where title =aaa or 1=1,Php注入的预防(一),确认GPC开启,若没开启则用addsl
3、ashes 函数过滤之,如下代码。 if (!get_magic_quotes_gpc() $lastname = addslashes($_POSTlastname); else $lastname = $_POSTlastname; 类型转换:对于数字型参数使用intval 或floatval 强制转换为数字型。 mb_convert_encoding/iconv函数使用注意设置数据库默认字符集。,Php注入的预防(二),Php5以上版本Mysqli扩展预防,参数化查询 $city = Amersfoort;/* create a prepared statement */$stmt =
4、$mysqli-prepare(SELECT District FROM City WHERE Name=?) $stmt-bind_param(s, $city);$stmt-execute();$stmt-bind_result($district);$stmt-fetch();printf(%s is in district %sn, $city, $district);$stmt-close(); ,Java 表现,由于java语言是强类型语言,所有变量定义前必须声明其类型,因而仅存在字符型的注入。 字符型注入实例: String sql = select * from tb_name
5、 where name= +varname+ and passwd=+varpasswd+; stmt = conn.prepareStatement(sql); 构造参数varpasswd值为: or 1 = 1 Sql语句经过解析后将是: select * from tb_name = 随意 and passwd = or 1 = 1;,Java预防,采用jdbc的prepareStatement查询数据库,并且sql语句中不出现参数,如: sqlStr = “select id from info where city=? and open=? order by id desc”; st
6、mt = conn.prepareStatement(sqlStr); stmt.setString(1,city); stmt.setString(2,var1);,A表现,开发语言常用的有:和C#,都属于强类型语言,因而只存在字符型注入。 注入原理,与asp的字符型注入一样。,A注入预防,使用A的参数化查询。 strSQL = SELECT * FROM Orders WHERE CustomerID = CustomerID; SqlCommand cmd = new SqlCommand(strSQL, cn);/创建一个sqlcommand对象。 /创建新参数,参数绑定 cmd.Pa
7、rameters.AddWithValue(CustomerID, ALFKI);,跨站脚本攻击,XSS(跨站脚本攻击),跨站脚本攻击(通常简写为XSS)是指攻者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。 危害: 盗取用户cookie Xss蠕虫 挂马,结合xss蠕虫,危害巨大。,Xss防范,对用户输入数据编码: Asp:server.htmlencode函数 Php:htmlspecialchars函数 :HttpContext.Current.Server.Html
8、Encode Java:默认没有提供过滤方法,需要自写方法。 过滤危险的html关键字符: 比如:script/iframe等。,XSS检测,搜索关键字。 Asp:request/ Php:$_GET/$_POST/$_COOKIE/$_SERVER Jsp:request.getParameter/ request.getCookies A:Request.QueryString/Form/Cookies/SeverVaiables/,文件上传,文件上传漏洞,利用当前系统已有的上传功能,比如文件上传,图像上传等的漏洞来上传任意文件或者webshell。 危害:直接上传webshell到服务器
9、,甚至获取服务器root权限。 各种语言表现大同小异。,Asp上传漏洞表现,经典的”0”上传任意后缀文件 。 假设:filename=c:nc.exe .bmp Check the file extension if right(tFile,4) “.bmp” then exit sub tFile=tFile if($imageinfomime != image/gif ,Php上传漏洞预防/检测,检查上传文件名中是否存在.php字符。 采用白名单,仅允许安全的类型,如gif/jpg/rar等,禁止用户自定义文件后缀。 检测关键字:move_uploaded_file/is_uploaded
10、_file/copy,Java文件上传漏洞/预防/检测,后缀检查不严引起的上传任意文件,主要为jsp和war后缀文件。 采用白名单严格限制上传类型。 检测方法: File/SmartUpload(常用的一个jsp开源上传组件) 至/WEB-INF/lib/目录下查看相关upload字样的类库,作为关键字搜索。,A 文件上传漏洞/预防/检测,A自身提供有上传组件,但默认上传任意后缀文件。 IIS默认解析的后缀名都是不安全的,采用白名单方式上传文件。 检查关键字: PostedFile.FileName/FileUpload,业务逻辑漏洞,$Con=mysql_connect(localhost,
11、root,root); mysql_select_db(user); $money = $_POSTmoney; $query = select money from userinfo where user=test; $result= mysql_query($query,$Con); $myrow = mysql_fetch_array($result); $newmoney = $myrow0 + $money; $query = update userinfo set money=.$newmoney. where user=test;,其他漏洞,信息泄露 权限验证不严 业务逻辑问题,谢谢,常力元 Email: 手机:13366656601,