WEB安全防范


以下例举十类常见的Web攻击和防范.

1、XSS: 跨站脚本攻击

定义:
恶意攻击者往Web页面里注入恶意Script代码,用户浏览这些网页时,就会执行其中的恶意代码,可对用户进行盗取cookie信息、会话劫持等各种攻击.

解决方法:
对用户输入内容和服务端返回内容进行过滤和转译
(1)输入过滤:
在web端做了限制,对用户输入的数据做一定校验/过滤.
攻击者通抓包工具如Fiddler还是可以绕过前端输入的限制,修改请求注入攻击脚本。
后台服务器处理:需要在接收到用户输入的数据后,对特殊危险字符进行过滤或者转义处理,然后再存储到数据库中。
(2) 输出编码:
服务器端输出到浏览器的数据处理,JavaScript的编码方式可以使用JavascriptEncode。
(3) 安全编码:
开发需尽量避免Web客户端文档重写、重定向或其他敏感操作,同时要避免使用客户端数据,这些操作需尽量在服务器端使用动态页面来实现。
(4) HttpOnly Cookie:
预防XSS攻击窃取用户cookie最有效的防御手段。
Web应用程序在设置cookie时,将其属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。
(5)WAF(防火墙:
防范诸如网页木马(Web Application Firewall),

  • 现代大部分浏览器都自带 XSS 筛选器,vue / react 等成熟框架也对 XSS 进行一些防护
  • 即便如此,我们在开发时也要注意和小心
  • 对用户输入内容和服务端返回内容进行过滤和转译
  • 重要内容加密传输
  • 合理使用get/post等请求方式
  • 对于URL携带参数谨慎使用
  • 我们无法做到彻底阻止,但是能增加黑客攻击成本,当成本与利益不符时自然会降低风险

2、CSRF:跨站请求伪造

[通过伪造身份提交POST和GET请求来进行跨域的攻击];如转账.

攻击的原理:
网站A在本地保存服务器的cookie。然后B网站携带着A的用户cookie信息去访问B网站.让A网站造成是用户自己访问的假相,从而来进行一些列的操作.
常见的就是转账.

解决方案
(1) 验证码
关键业务点设置验证码
(2) Referer Check
通过Referer Check来监控CSRF攻击的发生. 服务器通过检查浏览器请求中携带的HTTP 包头header 中的 Referer的值. 检查请求的来源.

正常请求的referer具有一定规律,如在提交表单的referer必定是在该页面发起的请求。服务器通过检查浏览器请求中携带的HTTP 包头header 中的 Referer的值,是不是这个页面,来判断是不是CSRF攻击。
但在某些情况下如从https跳转到http,浏览器处于安全考虑,不会发送referer,服务器就无法进行check了。

若与该网站同域的其他网站有XSS漏洞,那么攻击者可以在其他网站注入恶意脚本,受害者进入了此类同域的网址,也会遭受攻击。
出于以上原因,无法完全依赖Referer Check作为防御CSRF的主要手段。但是可以通过Referer Check来监控CSRF攻击的发生。

(3) 双重Cookie

  • 正常用户A用用户名和密码访问网站会得到一个Cookie存到浏览器;
  • 若用户访问敏感信息,服务端响应是会将之前用户A的Cookie在页面的Form表单中存一份;
  • 正常用户A访问网站时,form表单中的cookie和cookie中的cookie值是相同的.
  • 如果是恶意攻击者拿着用户A的cookie访问,但是表单或者请求参数中没有正确的Cookie值,服务器会判断表单或者请求参数中没的Cookie值和
    cookie中的cookie值是否相同来判断是否CSRF攻击;

(4) Anti CSRF Token
用Axios 客户端支持防止CSRF,安全性更高,
客户端支持防御 CSRF,就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,
这样,后台就可以轻松辨别出这个请求是否是用户假冒的。

目前比较完善的解决方案是加入Anti-CSRF-Token.
即发送请求时在HTTP 请求中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token。
服务器读取浏览器当前域cookie中这个token值,会进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为这是合法的请求。否则拒绝该次服务。

Token比Referer检查要安全很多,token可以在用户登陆后产生并放于session或cookie中,然后在每次请求时服务器把token从session或cookie中拿出,与本次请求中的token 进行比对。

由于token的存在,攻击者无法再构造出一个完整的URL实施CSRF攻击。

但在处理多个页面共存问题时,当某个页面消耗掉token后,其他页面的表单保存的还是被消耗掉的那个token,其他页面的表单提交时会出现token错误。

(5)涉及到数据修改操作严格使用 post 请求而不是 get 请求

防范 CSRF 攻击可以遵循以下几种规则:

  1. Get 请求不用于对数据进行修改
  2. Cookie设置HTTP Only
  3. 接口设置禁止跨域
  4. 请求时附带验证信息,比如验证码或者 Token

3、 SQL注入

定义:
应用程序向后台数据库传递SQ时,攻击者将SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.
解决方案:
(1) 防止系统敏感信息泄露
设置php.ini选项display_errors=off,防止php脚本出错之后,在web页面输出敏感信息错误,让攻击者有机可乘。
(2) 数据转义
设置php.ini选项magic_quotes_gpc=on,它会将提交的变量中所有的’(单引号),”(双引号),(反斜杠),空白字符等都在前面自动加上\。
或者采用mysql_real_escape()函数或addslashes()函数进行输入参数的转义。
(3) 增加黑名单或者白名单验证
白名单验证一般指,检查用户输入是否是符合预期的类型、长度、数值范围或者其他格式标准。
黑名单验证是指,若在用户输入中,包含明显的恶意内容则拒绝该条用户请求。在使用白名单验证时,一般会配合黑名单验证。

4、文件上传漏洞

黑客利用上传漏洞可以直接得web shell,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。
该漏洞允许用户上传任意文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。

原理
由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,
并能够将这些文件传递给 PHP 解释器,就可以在远程服务器上执行任意PHP脚本。

解决方案:
(1)检查服务器是否判断了上传文件类型及后缀。
(2) 定义上传文件类型白名单,即只允许白名单里面类型的文件上传。
==(3) 文件上传目录禁止执行脚本解析,避免攻击者进行二次攻击。 ==
Info漏洞 Info漏洞就是CGI把输入的参数原样输出到页面,攻击者通过修改输入参数而达到欺骗用户的目的。

5、iframe

a.如何让自己的网站不被其他网站的 iframe 引用?

  • 检测当前网站是否被第三方iframe引用
  • 若相等证明没有被第三方引用,若不等证明被第三方引用。当发现被引用时强制跳转百度。
    if(top.location != self.location){
    top.location.href = ‘http://www.baidu.com’
    }
    b.如何禁用,被使用的 iframe 对当前网站某些操作?
    *sandbox是html5的新属性,主要是提高iframe安全系数。
    iframe因安全问题而臭名昭著,这主要是因为iframe常被用于嵌入到第三方中,然后执行某些恶意操作。

现在有一场景:我的网站需要 iframe 引用某网站,但是不想被该网站操作DOM、不想加载某些js(广告、弹框等)、当前窗口被强行跳转链接等,我们可以设置 sandbox 属性。如使用多项用空格分隔。

  • allow-same-origin:允许被视为同源,即可操作父级DOM或cookie等
  • allow-top-navigation:允许当前iframe的引用网页通过url跳转链接或加载
  • allow-forms:允许表单提交
  • allow-scripts:允许执行脚本文件
  • allow-popups:允许浏览器打开新窗口进行跳转
  • “”:设置为空时上面所有允许全部禁止

6、opener

在这里插入图片描述


# 7、点击劫持:
一种视觉欺骗的攻击手段
在这里插入图片描述

8、CDN劫持

在这里插入图片描述

# 9、HSTS(HTTP严格传输安全)
HSTS(HTTP Strict Transport Security:HTTP严格传输安全)
网站接受从 HTTP 请求跳转到 HTTPS 请求的做法,
例如我们输入“http://www.baidu.com”或“www.baidu.com”最终都会被302重定向到“https://www.baidu.com”。这就存在安全风险,当我们第一次通过 HTTP 或域名进行访问时,302重定向有可能会被劫持,篡改成一个恶意或钓鱼网站。
HSTS:通知浏览器此网站禁止使用 HTTP 方式加载,浏览器应该自动把所有尝试使用 HTTP 的请求自动替换为 HTTPS 进行请求。
用户首次访问时并不受 HSTS 保护,因为第一次还未形成链接。我们可以通过 浏览器预置HSTS域名列表 或 将HSTS信息加入到域名系统记录中,来解决第一次访问的问题。

10、权限漏洞

多数应用具备权限划分,如果权限控制没设置好,攻击者利用这个越权漏洞访问未经授权的功能,进而查看敏感,进行增删改操作.
越权漏洞分为水平越权[如同事可以查看同事的薪资],垂直越权和权限框架三种.
防御:

  • 采用成熟的权限管理框架,如spring security;
  • 用户进行访问操作的凭证,优先采用在服务器关联session或加密后放在session中获取;
  • 必须采用表单或其他参数提交用户进行访问操作的凭证时,尽可能采用增加随机数,加密算法加密后提交,服务端对客户端提交的凭证进行验证.
  • 对管理功能的模块进行严格的权限验证.

其他涉及安全的信息

不安全的第三方库和插件:
防范措施:定期更新和维护第三方库和插件,及时应用安全补丁,仅从可信源获取并验证第三方库和插件。

弱密码和暴力破解:
防范措施:要求用户使用强密码,并对密码进行适当的加密和哈希,使用验证码、登录失败限制、双因素认证等机制来防止暴力破解。

关注安全论坛
安全访问论坛

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值