安全问题总结

安全测试问题总结

  1. SQL注入问题

    mybatis的mapper.xml配置中使用了“$”做占位符,该占位符在运行时会使用变量原样替换.

    如果变量是一个用户输入的值,就可以被SQL注入,所以要慎用该占位符,尽量使用“#”

  2. XSS跨域脚本访问

    对于用户的输入和输出给用户web页面的内容应当进行安全过滤,否则可能会保存恶意用户输入的攻击脚本.用户访问这些内容的时候,会导致用户cookie和session数据被恶意脚本访问,利用来执行恶意操作.

    应对策略:

    • 服务端在接受用户输入时需要对一些非安全字符,例如<>/&=等,进行转义.

    • 使用Spring的JavaWEB项目可以在web.xml配置如下内容:

      <context-param>
        <param-name>defaultHtmlEscape</param-name>
        <param-value>true</param-value>
      </context-param>
    • 使用自定义的XssFilter对请求进行包装,对请求内容进行过滤

  3. 回显的消息暴露数据库和表信息

    由于直接使用底层数据库异常的消息直接回显,某些数据库异常错误会暴露使用的sql语句,攻击者可以从中推断系统的数据库和表信息,发现漏洞进行攻击.

    应对策略:

    • 异常处理时对数据库异常进行识别,特别处理返回自定义消息
    • 对回显信息进行过滤处理,规避显示一些关键字或者非安全字符1
  4. 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的值


  1. 该方法也可以避免XSS
  2. 在SpringMVC中定义RequestMapping(/mapping)默认会匹配/mapping.*

猜你喜欢

转载自blog.csdn.net/u012631045/article/details/81480376