最近实验室网站检测出了漏洞,需要修复,以下对修复内容给做点总结
1. XSS 攻击
XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS,XSS 是一种在web应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到提供给其它用户使用的页面中。
XSS 如何发生
假如有下面一个textbox
<input type="text" name="address1" value="value1from">
value1from是来自用户的输入,如果用户不是输入value1from,而是输入
"/><script>alert(document.cookie)</script><!-
那么就会变成
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
嵌入的JavaScript代码将会被执行
或者用户输入的是 "onfocus="alert(document.cookie)
那么就会变成<input type="text" name="address1" value="" onfocus="alert(document.cookie)">
事件被触发的时候嵌入的JavaScript代码将会被执行
攻击的威力,取决于用户输入了什么样的脚本
HTML Encode
XSS之所以会发生, 是因为用户输入的数据变成了代码。 所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的”中括号”, “单引号”,“引号” 之类的特殊字符进行编码。
XSS 漏洞修复
原则: 不相信客户输入的数据
注意: 攻击代码不一定在中
- 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
- 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。
- 对数据进行Html Encode 处理
- 过滤或移除特殊的Html标签, 例如:
<script>, <iframe> , < for <, > for >, " for
- 过滤JavaScript 事件的标签。例如 “onclick=”, “onfocus” 等等。
HTML Encode 和URL Encode的区别
刚开始我老是把这两个东西搞混淆, 其实这是两个不同的东西。
HTML编码前面已经介绍过了,关于URL 编码是为了符合url的规范。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。
例如在baidu中搜索”测试汉字”。 URL会变成
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
所谓URL编码就是: 把所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)
输入过滤实现
新建 XssHttpServletRequestWrapper 类
新建 XSSFilter 过滤器
|
|
在 web.xml 中增加过滤器相关
2. tomcat 7 设置 cookie httpOnly
Tomcat 7对会话cookie自动启用HttpOnly cookie标记,查看配置以确保该选项为被禁用。
要启用HttpOnly,必须在 CATALINA_BASE/conf/context.xml 中做如下设置,使之全局应用于所有应用程序:
在需要通过JavaScript访问会话cookie的情况下,使用HttpOnly可能会影响应用程序功能。如果应用程序需要通过JavaScript访问HttpOnly cookie,可以在METAINF/context.xml中一个单独的Context中定义一个异常。
- 修改tomcat/conf/context.xml
<Context useHttpOnly="true"></context>
- 修改tomcat/conf/web.xml 1234567<session-config><cookie-config><http-only>true</http-only></cookie-config></span></session-config>```3. 修改tomcat server.xml
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>
|
|
<error-page>
<error-code>500</error-code>
<location>/errorpages/error.html</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type> <location>/errorpages/error.html</location>
</error-page>
```
此外,如果Manager应用程序没被移除,必须手动将位于 CATALINA_HOME/webapps/manager/WEB-INF/jsp/ 的错误页面里的“Tomcat 7“版本信息移除。
参考
http://topmanopensource.iteye.com/blog/2079474
http://binary-space.iteye.com/blog/2373933
http://www.voidcn.com/article/p-edpibtrp-bnw.html