Web安全

原则:

浏览器安全

同源策略

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互

URL 结果 原因
http://store.company.com/dir2/other.html 成功 只有路径不同
http://store.company.com/dir/inner/another.html 成功 只有路径不同
https://store.company.com/secure.html 失败 不同协议 ( https和http )
http://store.company.com:81/dir/etc.html 失败 不同端口 ( http:// 80是默认的)
http://news.company.com/dir/other.html 失败 不同域名 ( news和store )

同源策略一旦出现漏洞被绕过,将会出现严重的后果

浏览器沙箱

沙箱设计的目的是为了让不可信的代码运行在一定的环境中,从而限制这些代码访问隔离区之外的资源。如果因为某种原因,确实需要访问隔离区外的资源,那么就必须通过的指定的通道,这些通道会进行严格的安全检查,来判断请求的合法性。通道会采取默认拒绝的策略,一般采用封装 API 的方式来实现

恶意网址拦截

大部分都是通过识别上传到云,浏览器厂商共享数据库,从而识别恶意网站

防盗链

盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供很少的资源,而真正的服务提供商却得不到任何的收益

实现原理

通过判断HTTP请求头referer(访问的来源)字段,服务端再根据该字段是否返回资源

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest) request;
    String referer = req.getHeader("Referer");
    if (StringUtils.isEmpty(referer)) {
        request.getRequestDispatcher("/imgs/error.png").forward(request, response);
        return;
    }
    String domain = getDomain(referer);
    if (!domain.equals(domainName)) {
        request.getRequestDispatcher("/imgs/error.png").forward(request, response);
        return;
    }
    chain.doFilter(request, response);
}

跨站脚本攻击(XSS)

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序

XSS类型

XSS payload

防御

跨站请求伪造(CSRF)

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)

sequenceDiagram
  用户 ->> 浏览器: 访问网站A
  浏览器 ->> 真实网站A: 浏览并登陆信任A
  真实网站A ->> 浏览器: 验证通过, 返回Cookie
  用户 ->> 浏览器: 访问网站B
  浏览器 ->> 恶意网站B: 在没有退出网站A的情况下访问网站B
  恶意网站B ->> 浏览器: 要求访问站点A, 发出一个请求
  浏览器 ->> 真实网站A: 发起一个请求

防御

接口幂等性设计

两个关键因素:

需要考虑的:

MVVC 多版本并发控制

通过一个版本号来达到避免冲突,但是会有一定的重试

去重表

利用数据库的唯一索引特性,保证唯一的逻辑

悲观锁

整个执行过程中锁定该订单对应的记录

token

数据提交前要向服务的申请 token,token 放到 redis 或内存,token 有效时间提交后后台校验 token,同时删除 token,token只有一次有效性

SSRF

为了解决跨域问题,可能会出现客户端提交一串url交由服务器请求转发后再返回给客户端

sequenceDiagram
  黑客 ->> 网页服务器: server.com?url=htpp://192.168.0.1:8080
  网页服务器 ->> 内网服务器: 无脑请求
  内网服务器 ->> 网页服务器: 结果回送
  网页服务器 ->> 黑客: 内网信息泄露

漏洞利用

防御

点击劫持

202261213657

防御

HTML5安全

新标签

其他安全问题

注入攻击

注入攻击的本质,还是因为数据跟代码没有相分离,把用户输入的数据作为代码的一部分执行

SQL注入

数据库攻击技巧

防御

反序列化漏洞

在把数据转化成对象的过程中。在这个过程中,应用需要根据数据的内容,去调用特定的方法。而黑客正是利用这个逻辑,在数据中嵌入自定义的代码(比如执行某个系统命令)

防御

其他注入攻击

文件上传漏洞

文件上传检查绕过

apache文件解析

IIS文件解析

nginx对php cgi的执行问题

安全的文件上传

信息泄露

Web框架安全

模板引擎与XSS

CSRF

HTTP Headers

持久层

第三方依赖安全

对于项目应用的第三方依赖应该定时梳理,及时剔除无用依赖

当出现CVE漏洞时,一般都已有补丁发布,更新即可

但是某些情况下会面临无补丁可打的困境,此时可以通过前置防火墙检测拦截攻击流量

应用层拒绝服务攻击

DDOS

是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击

这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,使被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式

应用层DDOS

CC攻击

使用限制请求频率来防御,但本质还是需要通过做好性能优化与架构优化来对抗

防御应用层DDOS

资源耗尽攻击

以极低的速率发送数据,占用服务器资源

往正常的客户端写入超长数据,导致客户端请求被服务器拒绝

一些正则表达式的处理是非常耗费资源的

web服务器配置安全

jboss与tomcat

web服务器对同名参数的解析问题

伪随机数问题