安全测试问题总结
SQL注入问题
mybatis的mapper.xml配置中使用了“$”做占位符,该占位符在运行时会使用变量原样替换.
如果变量是一个用户输入的值,就可以被SQL注入,所以要慎用该占位符,尽量使用“#”
XSS跨域脚本访问
对于用户的输入和输出给用户web页面的内容应当进行安全过滤,否则可能会保存恶意用户输入的攻击脚本.用户访问这些内容的时候,会导致用户cookie和session数据被恶意脚本访问,利用来执行恶意操作.
应对策略:
服务端在接受用户输入时需要对一些非安全字符,例如
<>/&=
等,进行转义.使用Spring的JavaWEB项目可以在web.xml配置如下内容:
<context-param> <param-name>defaultHtmlEscape</param-name> <param-value>true</param-value> </context-param>
使用自定义的XssFilter对请求进行包装,对请求内容进行过滤
回显的消息暴露数据库和表信息
由于直接使用底层数据库异常的消息直接回显,某些数据库异常错误会暴露使用的sql语句,攻击者可以从中推断系统的数据库和表信息,发现漏洞进行攻击.
应对策略:
- 异常处理时对数据库异常进行识别,特别处理返回自定义消息
- 对回显信息进行过滤处理,规避显示一些关键字或者非安全字符1
Content-Dispostion请求头设置不当导致的安全问题
使用Spring-MVC时,默认会对所有请求进行后缀匹配2,可能被利用进行RFD,故框架会对所有请求地址中有文件名后缀(没有设置在白名单,或者在内容协商处理中显示声明)的响应添加
Content-Disposition:inline;filename=f.txt
头.但是这个头会导致IE中被利用进行XSS.应对策略:
对所有的后缀进行显示注册,Spring中可以做如下设置
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"> <!-- 限制后缀匹配为内容协商管理器注册的,避免安全问题RFD,XSS --> <mvc:path-matching registered-suffixes-only="true" /> </mvc:annotation-driven> <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="mediaTypes"> <value>do=application/json</value> </property> </bean>
对所返回内容为文本的响应,设置
Disposition:attachment;filename=f.txt
根据实际情况返回设置filename的值