前言 :
对于 web 开发者来说,熟悉 常见的 web 攻击方式,和对应的解决方法,这是必须的。不仅仅要了解,还要在自己平时开发的时候考虑到可能产生的安全隐患,尽量在编写代码的时候就杜绝。做好网站初步的防护工作。下面就对平时开发中,需要考虑到的一些安全攻击方法做一个总结概括。
一,跨站脚本攻击 (XSS):
- 什么是 XSS ?
跨站脚本攻击 指的是恶意攻击者往 web 页面插入可执行网页脚本代码,当用户浏览该页面的时候,嵌入的恶意代码会被执行。从而达到盗取用户信息或其他侵犯用户安全隐私的目标。
- XSS 有哪几种 ?
XSS 攻击 多变化,可以分为两个类型 :
- 非持久 XSS(反射型 XSS);攻击代码会被永久存储。
- 持久化 XSS (存储型 XSS);攻击代码被服务器原样返回。
DOM-BASE
型 ;攻击代码不经过服务器,直接在本地触发。
- 什么是非持久 XSS ?
非持久 XSS ,一般指的是通过给别人发送带有恶意脚本代码参数的 url,当 url 地址被打开时,特有的恶意代码参数被 html 解析,执行。
- 非持久 XSS 有什么特点 ?
- 即时性,不经过服务器存储,直接通过
HTTP
的GET
和POST
请求就能完成一次攻击,拿到用户隐私数据。- 攻击者需要 诱骗点击。
- 反馈率低,所以较难发现和响应修复。
- 盗取用户敏感保密信息。
- 怎么预防 非持久 XSS ?
- web 页面渲染的所有内容/数据都必须来自服务端。
- 尽量不要从
URL
、document
(文档)、referrer
、document.forms
这种DOM API
中获取数据直接渲染。- 尽量不要使用
eval
、new function()
、document.write()
、window.setInterval()
、innerhtml
、document.setTimeout()
、document.createElement()
等执行字符串的方法。- 前端渲染的时候对任何的字段都需要 做
escope
转义代码。
- 什么是持久型 XSS ?
持久型 XSS,一般存在于 form 表单提交等交互操作,比如发帖留言,提交文本信息等。黑客利用 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前页面获得后端后端从数据库中读入的注入代码时,恰将其渲染执行。
- 持久型 XSS 成功需要具备哪些条件 ?
POST
请求提交表单后端没做转义直接入库。- 后端从数据库中取出数据没做转义直接输出前端。
- 前端拿到后端数据没做转义直接渲染成
DOM。
- 持久型 XSS 有哪些特点 ?
- 持久性久,植入在数据库中。
- 危害面广,甚至可以让用户机器变成
DDOS
攻击的肉鸡。- 盗取用户私密信息。
- 基于字符集的 XSS。
- 基于Flash 的跨站 XSS。
- 未经验证的跳转 XSS。
- 总括预防 ?
- 严格校验用户输入, 如校验id类型,正则匹配等。
- 对于无法校验的输入,在输出之前进行转义
XSS
转义编码方案总结:HTML
编码,javascript
编码,URL
编码。CSP :
XSS 攻击的终结者,因为这种策略不再像传统只靠各种正则和特征匹配来识别跨站攻击 Payload,而是直接从协议层把一些存在安全隐患的用法默认给干掉了,把同源同域更发挥到了极致
二,跨站请求伪造攻击 (CSRF):
- 什么是 CSRF ?
CSRF,跨站请求伪造攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。造成个人隐私泄露以及财产安全问题。
- CSRF 攻击步骤 ?
- 访问信任站点。
- 验证登陆,返回 cookie。
- 在未退出信任站点的情况下访问恶意站点。
- 恶意网站返回的数据要求访问信任站点的数据。
- 带着登陆态向信任站点发送一个写请求。
- 怎么去预防 CSRF ?
- 正确使用
GET
、POST
和cookie。
- 在非 GET 请求中增加 token,当正确使用 GET 和 POST 后,剩下的就剩在所有非 GET 请求中国增加随机数。客户端页面增加伪随机数。
- 验证码 token,
HTTP
请求中校验Referer 字段
。
三,SQL 注入 :
- 什么是 SQL ?
攻击者成功的向服务器提交恶意的
SQL
查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。
- 怎么去做好预防 ?
防止
SQL
注入主要是不能允许用户输入的内容影响正常的SQL
语句逻辑,用户输入的任何内容都必须 进行转义过滤,当然仅做到这个是不够的:
- 严格限制
web
应用的数据库的操作权限,满足工作即可,最大化减少注入攻击对数据库的危害.- 后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如正则匹配。
- 对进入数据库的热水字符进行转义或编码转换。
- 所有的查询语句建议使用数据库提供的参数化查询接口。
- 在应用发布之前建议使用专业的
SQL
注意检测工具进行检测。sqlmap
、SQLninja
等。- 避免网站打印出
SQL
错误信息。- 不要过于细致返回错误信息。
四,流量劫持 :
- 概念 和 分类 ?
流量劫持基本分两种:
DNS
劫持 和HTTP
劫持,目的都是一样的,就是当用户访问A
的时候,给你展示的并不是或者不完全是A
提供的内容。
- 什么是 DNS 劫持 ?
DNS
劫持:就是通过劫持了DNS
服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。
- 什么是 HTTP 劫持 ?
HTTP 劫持 :大多数情况是运营商 HTTP 劫持,当我们使用
HTTP
请求请求一个网站页面的时候,网络运营商会在正常的数据流中插入精心设计的网络数据报文,让客户端(通常是浏览器)展示“错误”的数据,通常是一些弹窗,宣传性广告或者直接显示某网站的内容,大家应该都有遇到过。
HTTP
劫持解决方案 :https
- 怎么预防流量劫持 ?
能够实现
HTTP
劫持的根本原因是HTTP
协议没有办法对通信对方的身份进行校验以及对数据完整性进行校验,如果能解决这个问题,则流量劫持将无法轻易发生,所以防止HTTP
劫持的方法只有 将内容加密,让劫持者无法破解篡改,这样就可以防止HTTP
劫持了。
五,服务器漏洞 :
- 常见的几种 ?
- 越权操作漏洞。
- 目录遍历漏洞。如 http://host.com/…/…/…/etc/passwd,防御方法就是需要对URL或参数进行 …/ ./等字符的转义过滤。
- 物理路径泄露。
- 源码暴露漏洞。
参考链接 :
https://blog.csdn.net/yin_fei_lnmp/article/details/106524645