Java Web编程

一、二、三有空补

四.  Web应用的安全

           1.  CSS攻击,跨站脚本攻击

                       跨站脚本,顾名思义,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码,一般需要以下几个

                条件:

              (1)客户端访问的网站是一个有漏洞的网站,但是他没有意识到;

              (2)在这个网站中通过一些手段放入一段可以执行的代码,吸引客户执行(通过鼠标点击等);

              (3)客户点击后,代码执行,可以达到攻击目的。

                解决方案:对用户输入的数据进行HTML转移处理。如今很多开源框架默认就支持HTML的转义。

           2.  CSRF攻击(Cross Site Request Forgery, 跨站域请求伪造)

                       你这可以这么理解 CSRF 攻击:攻击者盗用了你的身份,伪装成你发送恶意请求。CSRF能够做的事

                情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包

                括:个人隐私泄露以及财产安全。

                具体攻击过程如下:

              (1)用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

              (2)在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正

                       常发送请求到网站A;

              (3)用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

              (4)网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A

                 解决方案:

               (1)将cookie设置成HttpOnly

               (2)增加token

                               其原理是在请求中放入攻击者所不能伪造的信息,并且该新信息不存在于cookie中。鉴于此,系

                        统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token验证,

                        如果请求中没有token或者token内容不正确,则认为CSRF攻击而拒绝该请求。例如,token可以存放

                        在表单中的隐藏域中:<input type="hidden" name="_token" value="tokenvalue"/>。token的值通过服

                        务端生成,表单提交后token的值通过POST请求与参数一同带到服务端,每次会话可以使用相同的

                        token,会话过期,则token失效,攻击者因无法获取token,也就无法伪造请求。

          HttpSession session=request.getSession()
          Object token=session.getAttribute("_token")
          if(token==null||"".equals(token))
          {
             session.setAttribute("_token",UUID.randomUUID().toString());
          }

           3.SQL注入攻击

              解决方案:

            (1)使用预编译语句(PreparedStatement)

                            预编译语句使用参数占位符来替代需要动态传入的参数,这样攻击者无法改变SQL语句的结构,

                     SQL语句的语义不会发生变化,即便用户输入sql,它会将其转义。

                     例如,原语句:

                     select * from hhuser where nick=nickname and password=password

                     例如用户输入 'or '1'='1时,不使用预编译,生成语句为:

                     select * from hhuser where nick='zhangsan' and password='' or '1'='1'

                     使用预编译:        

                     select * from hhuser where nick='zhangsan' and password='\' or \'1\'=\'1'

                     可见发生了转义。

            (2)使用ORM框架,如IBATIS和Hibernate等都支持输入变量的转义实现办法时通过#配置变量

           4.文件上传漏洞

            (1)一般处理方法

                            为了防止用户上传恶意的可执行文件和脚本,以及将文件服务器当做免费的文件存储服务器使用,

                     我们需要对上传的文件进行白名单校验并限制上传文件的大小,上传文件需要重新命名,使共攻者无

                     法猜测上传文件的访问路径。对于上传的文件来说,不能简单地通过后缀名称判断文件的类型,因为

                     恶意攻击可以将可执行文件的后缀名称改成图片或者其它后缀类型,诱导用户执行。因此,判断文件

                     类型需要使用更安全的方式,很多类型的文件起使得几个字节内容使固定得,根据这几个字节的内容,

                     就可以确定文件的类型,这几个字节被称为魔数。

            (2)配合使用imagemaglck

                            对于图片类型的文件,可以上传后对图片进行相应的缩放,破坏恶意用户上传的二进制可执行文

                     件的结构。imagemaglck是一套功能强大、稳定并且开源的对图片进行处理的开发工具包,能处理多

                     种格式的图片文件,可以利用imagemaglck来对图片进行缩放。

                     魔数枚举类型:

public enum FileType {
 
    /** JPEG */
    JPEG("FFD8FF"),
 
    /** PNG */
    PNG("89504E47"),
 
    /** GIF */
    GIF("47494638"),
 
    /** TIFF */
    TIFF("49492A00"),
 
    /** Windows bitmap */
    BMP("424D"),
 
    /** CAD */
    DWG("41433130"),
 
    /** Adobe photoshop */
    PSD("38425053"),
 
    /** Rich Text Format */
    RTF("7B5C727466"),
 
    /** XML */
    XML("3C3F786D6C"),
 
    /** HTML */
    HTML("68746D6C3E"),
 
    /** Outlook Express */
    DBX("CFAD12FEC5FD746F "),
 
    /** Outlook */
    PST("2142444E"),
 
    /** doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db */
    OLE2("0xD0CF11E0A1B11AE1"),
 
    /** Microsoft Word/Excel */
    XLS_DOC("D0CF11E0"),
 
    /** Microsoft Access */
    MDB("5374616E64617264204A"),
 
    /** Word Perfect */
    WPB("FF575043"),
 
    /** Postscript */
    EPS_PS("252150532D41646F6265"),
 
    /** Adobe Acrobat */
    PDF("255044462D312E"),
 
    /** Windows Password */
    PWL("E3828596"),
 
    /** ZIP Archive */
    ZIP("504B0304"),
 
    /** ARAR Archive */
    RAR("52617221"),
 
    /** WAVE */
    WAV("57415645"),
 
    /** AVI */
    AVI("41564920"),
 
    /** Real Audio */
    RAM("2E7261FD"),
 
    /** Real Media */
    RM("2E524D46"),
 
    /** Quicktime */
    MOV("6D6F6F76"),
 
    /** Windows Media */
    ASF("3026B2758E66CF11"),
 
    /** MIDI */
    MID("4D546864");
 
    private String value = "";
 
    private FileType(String value) {
        this.value = value;
    }
 
    public String getValue() {
        return value;
    }
 
    public void setValue(String value) {
        this.value = value;
    }
 
}

 

转载于:https://www.cnblogs.com/jialanshun/p/10592974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值