安全的本质其实是数据流,搞懂《HTTP 权威指南》720 页,你就会明白安全术语的“输入输出”。 黑客通过输入提交“特殊数据”,特殊数据在数据流的每个层处理,如果某个层没处理好,在输出的时候,就会出现相应层的安全问题。
跨站脚本攻击,是说攻击者通过注入恶意的脚本,在用户浏览网页的时候进行攻击,比如获取 cookie
,或者其他用户身份信息,可以分为存储型和反射型:
<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发 XSS
代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种 XSS
非常危险,容易造成蠕虫,大量盗窃 cookie
(虽然还有种 DOM
型 XSS
,但是也还是包括在存储型 XSS
内)。
基于文档对象模型 (Document Objeet Model,DOM
)的一种漏洞。DOM
是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM
中有很多对象,其中一些是用户可以操纵的,如 uRI
,location
,refelTer
等。客户端的脚本程序可以通过 DOM 动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得 DOM
中的数据在本地执行,如果 DOM
中的数据没有经过严格确认,就会产生 DOM XSS
漏洞。
URL
参数)进行过滤,对输出进行编码。也就是对提交的所有内容进行过滤,对 url
中的参数进行过滤,过滤掉会导致脚本执行的相关内容;html
编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的 XSS
攻击。跨站请求伪造,可以理解为攻击者盗用了用户的身份,以用户的名义发送了恶意请求,比如用户登录了一个网站后,立刻在另一个 tab
页面访问量攻击者用来制造攻击的网站,这个网站要求访问刚刚登陆的网站,并发送了一个恶意请求,这时候 CSRF
就产生了,比如这个制造攻击的网站使用一张图片,但是这种图片的链接却是可以修改数据库的,这时候攻击者就可以以用户的名义操作这个数据库。
HTTP Referer
字段:根据 HTTP
协议,在 HTTP
头中有一个字段叫 Referer
,它记录了该 HTTP
请求的来源地址,每一个请求验证其 Referer
值即可cookie
设置为 HttpOnly
:程序(如 JavaScript
脚本、Applet
等)就无法读取到 cookie
信息,避免了攻击者伪造 cookie
的情况出现HTTP
头中自定义属性,例如 token
,并验证:在请求中放入攻击者所不能伪造的信息,并且该信总不存在于 cookie
之中。点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe
嵌套的方式嵌入自己的网页中,并将 iframe
设置为透明,在页面中透出一个按钮诱导用户点击。
iframe
或者其它标签的属性X-FRAME-OPTIONS
: 是一个 HTTP
响应头,在现代浏览器有一个很好的支持。这个 HTTP
响应头 就是为了防御用 iframe
嵌套的点击劫持攻击。该响应头有三个值可选,分别是
iframe
的方式展示iframe
的方式展示iframe
中展示JavaScript
防御: 对于某些远古浏览器来说,并不能支持上面的这种方式,那我们只有通过 JS 的方式来防御点击劫持了。<head><style id="click-jack">html {display: none !important;}</style></head><body><script dangerouslySetInnerHTML={{ __html: `if (self == top) {var style = document.getElementById('click-jack')document.body.removeChild(style)} else {top.location = self.location}` }} /></body>
借助未验证的URL跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题。
黑客利用URL跳转漏洞来诱导安全意识低的用户点击,导致用户信息泄露或者资金的流失。其原理是黑客构建恶意链接(链接需要进行伪装,尽可能迷惑),发在QQ群或者是浏览量多的贴吧/论坛中。 安全意识低的用户点击后,经过服务器或者浏览器解析后,跳到恶意的网站中。
所谓 SQL
注入,就是通过把 SQL
命令插入到 Web
表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL
命令,比如先前的很多影视网站泄露 VIP
会员密码大多就是通过 WEB
表单递交查询字符暴出的,这类表单特别容易受到 SQL
注入式攻击.当应用程序使用输入内容来构造动态 sql
语句以访问数据库时,会发生 sql
注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生 sql
注入。 黑客通过 SQL
注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过 SQL
注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下 SQL
注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库
防御 SQL
注入
ORM
工具进行数据库访问;