Web漏洞检测及修复
Web漏洞是指以各种语言(PHP、JSP、C++等)开发的CGI/Web Service中存在的安全漏洞。
下面是漏洞的定义,检测方法以及修复方案。
1. 注入漏洞
1.1 SQL注入漏洞
名称: SQL注入漏洞(SQL Injection)
**描述:**Web程序代码中对于用户提交的参数未做过滤就直接放到SQL语句中执行,导致参数中的特殊字符打破了SQL语句原有逻辑,黑客可以利用该漏洞执行任意SQL语句。
**检测方法:**通过修改参数来判断是否存在漏洞。
修复方案:
- 针对ASP.NET的防XSS库,Microsoft有提供统一的方法,具体可以参见如下链接:http://www.cnblogs.com/hcmfys/archive/2008/07/11/1240809.html
- 针对其它语言如下细分:
在代码级对带入SQL语句中的外部参数进行转义或过滤:
(1)对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验
(2)对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)。关于这点,PHP有类似的转义函数mysql_escape_string和mysql_real_escape_string。
建议:
(1)使用腾讯CMEM存储方案;
(2)对与数据库进行交互的用户请求数据,要先做过滤,防止SQL注入。
1.2 XSS漏洞
**名称:**XSS注入漏洞(Cross-site Scripting)
**描述:**Web程序代码中把用户提交的参数未做过滤就直接输出到页面,参数中的特殊字符打破了HTML页面的原有逻辑,黑客可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫传播、篡改页面实施钓鱼攻击等。
**检测方法:**通过修改参数来判断是否存在漏洞。
比如用户输入内容:’a”的时候,合法的显示是: ’a” ,合法的显示的源码是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jd1Zomg-1689818018820)(D:\BaiduSyncdisk\工作\assets\Xss_1.jpg)]
而存在漏洞的页面显示却是:’a”
源码是:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UDMkodHn-1689818018820)(D:\BaiduSyncdisk\工作\assets\Xss_2.jpg)]
修复方案:
-
开发者应该严格按照openid和openkey的校验规则判断openid和openkey是否合法,且判断其它参数的合法性,不合法不返回任何内容。
-
严格限制URL参数输入值的格式,不能包含不必要的特殊字符( %0d、%0a、%0D 、%0A 等)。
-
针对ASP.NET的防XSS库,Microsoft有提供统一的库,具体可以参见如下链接
微软官网:http://msdn.microsoft.com/en-us/library/aa973813.aspx
- 具体的js方法如下:
(1)对于用户输入的参数值展现在HTML正文中或者属性值中的情况,例如:
展现在html正文中:Un-trusted input
展现在属性值中:
此时需要将红色的不可信内容中做如下的转码(即将< > ‘ “ ` 转成html实体):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9inExzjh-1689818018821)(D:\BaiduSyncdisk\工作\assets\sec_hole_10.png)]
(2)对于用户输入落在
需要将红色的不可信内容中做如下的转码: [a-zA-Z0-9.-_,]以及ASC值大于0x80之外的所有字符转化为\x**这种形式,例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来