1、跨站脚本攻击(xss)
原理:Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS。XSS攻击其核心都是利用了脚本注入。
XSS的三个类型分别是:
-
反射性XSS(非持久性XSS)
-
(服务端返回代码中包括恶意代码)
• • type• 前端考虑过滤一些非法字符 后端验证XSS漏洞可以利用:请求参数未请求接口前进行过滤一些非法字符。比如自定义Filter过滤器。
-
存储型XSS
存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。 会存储到数据库,页面刷新后会弹出。
-
DOM XSS(恶意代码一直在客户端)
因为其形成是通过修改页面的"DOM节点"形成的XSS。例如:通过修改DOM节点上的绑定方法,用户无意间通过点击、输入等行为执行这些方法获取到用户的相关信息
区别:
存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。
反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。
POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见。
XSS的防御方式
1.1.HttpOnly
原理:浏览器禁止页面的Javascript访问带有HttpOnly属性的cookie。(实质解决的是:XSS后的cookie劫持攻击)如今已成为一种“标准”的做法。
解决方案:JavaEE给Cookie添加HttpOnly的方式为:
response.setHeader("Set-Cookie","cookiename=value; Path=/;Domain=domainvalue;
Max-Age=seconds;HTTPOnly");
1.2.输入检查(XSS Filter)
原理:让一些基于特殊字符的攻击失效。(常见的Web漏洞如XSS、SQLInjection等,都要求攻击者构造一
些特殊字符)* 输入检查的逻辑,必须在服务端实现,因为客户端的检查也是很容易被攻击者绕过,
现有的普遍做法是两端都做同样的检查,客户端的检查可以阻挡大部分误操作的正常用户,
从而节约服务器的资源。解决方案:检查是否包含"JavaScript","<script></script>"等敏感字符。
以及对字符串中的<>:"&/'等特殊字符做处理
1.3.输出检查
原理:一般来说除了富文本输出之外,在变量输出到HTML页面时,使用编码或转义的方式来防御XSS攻击解决方案:* 针对HTML代码的编码方式:HtmlEncode* PHP:htmlentities()和htmlspecialchars()两个函数* Javascript:JavascriptEncode(需要使用""对特殊字符进行转义,同时要求输出的变量必须在引号内部)* 在URL的path(路径)或者search(参数)中输出,使用URLEncode
2. 跨站点请求伪造(Cross Sites Request Forgery)
-
用户登录受信任网站A,并且在本地生成Cookie
-
在不登出网站A的情况下,访问有害网站B
-
不侧重脚本攻击,侧重请求伪造
预防:检验,过滤,编码转义,限制。
3、点击劫持
点击劫持是指在一个Web页面中隐藏了一个透明的iframe,用外层假页面诱导用户点击,实际上是在隐藏的frame上触发了点击事件进行一些用户不知情的操作。
-
禁止iframe的嵌套
if(window.top.location !== window.loaction){window.top.location === window.self.location} -
X-Frame-Options HTTP响应头是用来给浏览器指示允许一个页面能否在`、、`中展现的标记
4、本地存储数据问题
当服务端设置 'Access-Control-Allow-Origin' 时使用了通配符 "*",允许来自任意域的跨域请求,这是极其危险的。
把一些个人信息不经加密直接存到本地或者cookie,这样是非常不安全的,黑客们可以很容易就拿到用户的信息,所有在放到cookie中的信息或者localStorage里的信息要进行加密,加密可以自己定义一些加密方法或者网上寻找一些加密的插件,或者用base64进行多次加密然后再多次解码,这样就比较安全了。
5、跨域问题处理
当服务端设置 'Access-Control-Allow-Origin' 时使用了通配符 "*",允许来自任意域的跨域请求,这是极其危险
6、HTTPS加密传输数据
当其中的某一步被黑客拦截的时候,如果信息没有加密,就会很容易被盗取。