通常主要表现为使用未经过校验的字符串,解析不安全的JSON数据等。
一般流程表现为通过客户端提交请求给服务器,请求参数中带有特殊构造的恶意参数(以下会举例说明),请求发送到服务器有可能将恶意的参数保存到数据库造成服务器安全漏洞,或者参数返回到页面后造成导致页面结构被破坏,引入了不期望的代码到页面中。
以ZCMS2.1版本中的一个XSS漏洞为例:
在ZCMS2.2之前的版本都存在一个动态zaction地址的XSS漏洞,由于未对zaction的请求做参数处理导致所有的前端的所有zaction的动态页面可以通过URL参数构造跨域脚本进行攻击。
例如:http://localhost/zcms/member/login?SiteID=14&Referer= "><img%20src=@%20οnerrοr=alert(2580)%20/
访问此地址时由于Referer参数为进行过滤处理,导致参数被原封不动输出到了登录页面,造成页面格式错误,引入了不期望的代码到页面中。ZCMS2.2及以后的版本中修复了此问题。
2. 网站路径泄露
主要表现为在网站的页面中包含了服务器的路径信息,最常见的是由于未进行404或者500等异常错误的处理,导致错误信息直接输出到了页面中,可能会暴露服务器的一些路径信息。
这类问题一般比较容易处理,危害性也比较小,主要是获取到路径后可能配合其他的网站漏洞实施进一步攻击。
解决办法:添加对404或者500等异常状态的错误页面配置,避免直接显示错误日志在页面中。注意对页面信息的处理,避免返回的页面数据中包含系统路径信息。
3. 服务器端应用程序错误
系统有时候会发生一些未预知到的错误异常,未对错误页面处理可能导致异常信息被直接输出到页面中,异常信息会泄露系统程序的相关信息。
解决办法:添加对404或者500等异常状态的错误页面配置,避免直接显示错误日志在页面中。
4. Email地址泄露
主要表现在页面中存在Email地址,可能会导致Email地址被网页爬虫之类的扫描工具获取到。
解决办法:对页面中的Email地址在输出钱进行特殊处理,例如将@替换成#,通过js将Email地址输出到页面中,或者直接将Email地址转成图片输出到页面中等等。
5. HTTP方法评估
表中标记为危险的HTTP方法建议关掉。
HTTP |
方法 |
建议说明 |
HEAD |
安全 |
HEAD方法与GET方法的行为类似,但服务器在响应中只返回首部。不会返回请求主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。也被认为是安全的方法。 |
TRACE |
危险 |
服务端发起一个请求时,这个请求可能要穿过防火墙,代理,网关或其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,获得请求的最终形态。 |
GET |
安全 |
GET是最常用的HTTP请求方法。通常用于 请求服务器获取某个资源,被认为是安全的方法。 |
PUT |
安全 |
与GET从服务器读取文档相反,PUT方法会向服务器写入文件。PUT方法的语义就是让服务器用请求的主体来创建一个由请求的URL命名的新文档。 |
POST |
安全 |
POST方法起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据会被POST方法提交到服务器中并做进一步处理。 |
OPTIONS |
危险 |
OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。该方法能够让客户端不用实际访问那些资源就能判定访问各种资源的最优方式。 |
DELETE |
安全 |
DELETE方法能够请求服务器删除请求URL所指定的资源。 |
解决办法:
apache中关闭TRACE方法:
在配置文件http.conf中添加Trace_Enable off即可,也可以在ServerRoot中配置。
apache中关闭OPTIONS方法:配置文件中添加以下配置。
1
2
3
4
5
|
< Location
/> < Limit
OPTIONS> Deny from all </ Limit > </ Location > |
nginx中关闭TRACE、OPTIONS方法:
在nginx的配置文件nginx.conf的Server段里面添加如下代码
1
2
3
|
if
($request_method !~* GET|POST|HEAD) { return
403; } |
重启nginx,这样就屏蔽了除GET/POST/HEAD以外的其他方法。
tomcat中配置方法:在web.xml中添加如下配置即可自定义需要开启的HTTP METHODS。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< security-constraint > < web-resource-collection > < web-resource-name >fortune</ web-resource-name > < url-pattern >/*</ url-pattern > < http-method >PUT</ http-method > < http-method >DELETE</ http-method > < http-method >HEAD</ http-method > </ web-resource-collection > < auth-constraint ></ auth-constraint > </ security-constraint > < login-config > < auth-method >BASIC</ auth-method > </ login-config > |