-
XSS
跨站脚本(Cross-Site Scripting,XSS)是恶意代码注入网页。利用用户对指定网站的信任。
-
攻击方式
所有可输入的地方,若没有对输入数据进行处理的话,则都存在XSS漏洞。
-
通过巧妙的方法注入恶意指令代码(HTML、JS、Flash、
<iframe>,任何能写url的地方包含javascript: 可执行代码)到网页内容,使用户加载并执行恶意程序。攻击成功后,能够:盗取用户cookie、破坏页面结构、重定向到其它地址、利用用户机器执行各种非客户意愿的行为(如:发起请求、向其他网站发起DDoS攻击)等。
-
-
防御措施:
-
过滤用户输入(白名单HTML标签和标签属性)
去除或转义(如:HTML的字符实体)、对URL编码(
encodeURI)。e.g. js-xss
-
HttpOnly
cookie设置为HttpOnly不能在客户端使用
document.cookie访问。 -
开启浏览器CSP(Content-Security-Policy,内容安全策略),设置不允许加载白名单外的域名资源
-
HTTP响应头:
Content-Security-Policy: 具体指令 -
.html的<meta><meta http-equiv="Content-Security-Policy" content="具体指令">
- (已被CSP拒绝执行)避免动态执行JS脚本的方式(执行字符串):
eval、new Function、setTimeout/setInterval。
-
Flash的安全沙盒机制配置跨域传输:crossdomian.xml
-
-
-
CSRF
跨站请求伪造(Cross-Site Request Forgery,CSRF)是 第三方网站 挟制用户 在已登录的网页上执行非本意操作。利用网站对用户浏览器的信任。
-
攻击方式
-
当用户已经得到目标网站的认可后,在第三方网站 对 目标网站 进行请求操作。
攻击成功后,能够:进行所有目标网站的请求操作。
-
-
防御措施
-
同源策略
-
检查HTTP请求的Referer字段(Referer:请求来源地址),若不是信任的请求来源地址,则拒绝
地址栏直接输入内容不会提供
Referer。 -
跨域请求的限制(利用CORS等)
-
cookie设置
SameSite属性(cookie不随着跨域请求发送)
-
-
添加校验token
token:判断用户当前的会话状态是否有效(短时效性)。思路是请求需要携带一个攻击者无法获取到的令牌,服务端通过校验请求是否携带了合法的令牌,来判断是否是正常合法的请求。
目标网站请求 需要额外提供 保存在页面中的随机校验码(校验码不保存在cookie即可,因为需保证用户必须实时在目标网站才能获取到)。可以放进请求参数、或自定义HTTP请求头。
-
验证码
保证用户必须和目标网站进行交互后才可以发起请求。
-
POST请求替代GET请求都可能被利用,但
POST安全性高些:不会明文把参数写在url上;HTML标签自动请求GET请求(如:<img src="GET请求">),更容易被利用。
-
-
-
其他攻击
-
注入型劫持
通过在正常的网页中注入广告代码(JS代码、
<iframe>、其他标签等),实现页面弹窗提醒或者底部广告等。-
攻击方式
运营商劫持。
-
防御措施
全链路HTTPS(若使用CDN,则必须CDN请求和回源都是HTTPS)。
额外增加劫持难度:前端还可以用子资源完整性(SRI)验证加载文件的哈希摘要。
-
-
DNS攻击
使域名指往不正确的IP地址。
-
攻击方式
- 针对DNS服务器:DDoS攻击。
- 针对用户:DNS欺骗或劫持(访问恶意DNS服务器)、DNS缓存服务器投毒或污染、本机劫持(hosts文件篡改、本机DNS劫持、SPI链注入、DHO插件)。
-
防御措施
- 使用安全的DNS服务器。
- VPN或域名远程解析。
- 查杀病毒,清空DNS缓存。
-
-
SQL注入(SQL Injection)
运行非法的SQL。
-
OS命令注入攻击(OS Command Injection)
通过Web应用,执行非法的操作系统命令。
-
HTTP头部注入攻击(HTTP Header Injection)
通过在响应头部字段内插入换行,添加任意响应头部或主体。
-
邮件头部注入攻击(Mail Header Injection)
向邮件头部To或Subject内任意添加非法内容,可对任意邮件地址发送广告邮件或病毒邮件。
-
目录遍历攻击(Directory Traversal,Path Traversal)
对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的。
-
远程文件包含漏洞(Remote File Inclusion)
当部分脚本内容需要从其他文件读入时,利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本。
-
强制浏览(Forced Browsing)
从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
-
不正确的错误消息处理(Error Handling Vulnerability)
Web应用的错误信息内包含对攻击者有用的信息。
-
开放重定向(Open Redirect)
假如指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。
-
会话劫持(Session Hijack)
通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户。
-
会话固定攻击(Session Fixation)
强制用户使用攻击者指定的会话ID。
-
点击劫持(ClickJacking)、界面伪装(UI Redressing)
利用透明的按钮或链接做成陷阱,覆盖在Web页面上。然后诱使用户在不知情的情况下,点击那个链接访问内容。
-
密码破解(Password Cracking)
-
穷举法(Brute-force Attack,暴力破解法)
对所有密钥集合构成的密钥空间(Keyspace)进行穷举。即,用所有可行的候选密码对目标的密码系统试错。
-
字典攻击
利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码。
如:生日日期数值化。
-
一种安全的服务端存储密码方式:
先利用给密码加盐(salt)的方式增加额外信息,再使用散列(hash)函数计算出散列值后保存。
加盐
由服务器随机生成的一个字符串,保证长度足够长,且是真正随机生成。然后把它和密码字符串相连接(前后都可以)生成散列值。当两个用户使用了同一个密码时,由于随机生成的salt值不同,对应的散列值也将不同。这样一来,很大程度上减少了密码特征,攻击者也就很难利用自己手中的密码特征库进行破解。
-
-
DoS攻击(Denial of Service attack)、服务停止攻击或拒绝服务攻击
运行中的服务呈停止状态的攻击。
-
集中利用访问请求造成资源过载。
DDoS(Distributed Denial of Service attack)利用多台计算机发起Dos攻击。
-
通过攻击安全漏洞使服务停止。
-
-
Hash Collision DoS
Hash碰撞的拒绝式服务攻击(Hash Collision DoS)是对服务器进行恶意负载。
-
攻击方式
- Hash:把任意长度的输入,通过散列算法,输出固定长度的散列值。
- Hash Collision DoS:利用各语言Hash算法的「非随机性」,制造出无数value不同、key相同的数据,让Hash表成为一张单向链表,而导致整个网站的运行性能下降。
-
找到hash算法漏洞,不断提交服务器请求导致无数hash碰撞,进而形成类似单向链表的存储结构。
攻击成功后,能够:hash堆积、查询缓慢、服务器CPU高负荷、服务器内存溢出。
-
防御措施
- 升级hash算法。
- 限制POST参数个数和请求长度。
- 防火墙检测异常请求。
-
-
-
验证码
仅能预防机器行为:防止广告机注册、发帖、评论,防止暴力破解密码。
- 服务端生成图片,前端根据图片发送请求给服务端验证。
前端生成并验证。