美文网首页
Java web 系统安全笔记

Java web 系统安全笔记

作者: java后端领域 | 来源:发表于2019-08-23 16:23 被阅读0次

Java web 系统安全笔记

最近在解决公司一些接口的安全隐患问题,总结了一下笔记。例子以 Java 语言做演示

XSS 攻击

出现 XSS 攻击的案例总结

  • 请求参数原封不动返回前端,并让前端执行。

    • 前提:别人可以直接访问 URL,不需要验证登录态

    • 例子:spring boot + freemarker

      • 后台接口

        @Controller
        public class XssController {
        
        
          @RequestMapping("/xss")
          public String xssExample(HttpServletRequest request, String time) {
            request.setAttribute("time", time);
            return "xss";
          }
        
        }
        
      • 前端页面 xss.ftl

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE html
          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
          <title>Title</title>
        </head>
        <body>
        <script>
         alert(${time});
        </script>
        </body>
        </html>
        
      • 构造攻击请求

        http://localhost:8080/xss?time=38843349);alert(1);var a=(1

      • 经过浏览器加载后,脚本变成如下:

         alert(38843349);alert(1);var a=(1);
        

        所以你的原来脚本(alert(38843349);)执行后,后面攻击脚本就会执行,导致可能会泄露敏感数据(钓鱼等)

    • 解决方法

      • 方法一:弄个过滤器,将请求参数进行敏感字符(例如:<kbd>< > ( ) ' " </kbd>)进行进行过滤或转移

        优点:不用针对很多接口重复处理

        缺点:有些接口可能含有某些敏感字符;高并发场景用正则匹配可能有性能问题

      • 方法二:针对可能会出现 XSS 攻击的参数进行过滤或者转义

      • 方法三:返回 json 数据时, Content-Type 头尽量使用 application/json;charset=utf8;

        例如:http://localhost:8080/xss?request={"context":"<svg/onload=alert(1)>"}

        ,然后后台返回 json字符串又包含请求的 context 值,而且 content-type=text/html 类型,就会执行 context 里面的脚本,将 Content-Type 改为application/json; 后,异常脚本就会被过滤。

相关文章

网友评论

      本文标题:Java web 系统安全笔记

      本文链接:https://www.haomeiwen.com/subject/edytectx.html