前言随着互联网的高速发展,信息安全已经成为企业关注的重点之一,前端是引发安全问题的高危大本营。因此,作为前端开发者,了解前端问题的安全性,以及如何预防和修复安全漏洞是很有必要的。下面将从前端可能的攻击方式入手,讲解web中可能存在的安全漏洞,如何检测这些安全漏洞,以及如何防范潜在的恶意攻击。1.跨站脚本(CrossSitesScript)跨站脚本攻击,CrossSiteScript(简称CSS或)。是指黑客通过“HTML注入”对网页进行篡改,插入恶意脚本(主要是JavaScript脚本),从而在用户浏览网页时控制用户浏览器的一种攻击方式。知道了XSS是什么,那么你一定想知道它有什么危害以及如何防御它。这里有一个清单:挂马窃取用户cookies。网络钓鱼攻击,高级网络钓鱼技术。删除目标文章,恶意篡改数据,推卸责任。劫持用户网页行为,甚至进一步渗透内网。爆发了Web2.0蠕虫。蠕虫式挂马攻击,刷广告,刷流量,破坏在线数据其他常见的跨站脚本攻击还可以分为:反射型XSS,存储型XSS,DOMBasedXSS下面分别介绍三种常见的类型具体分析1.1反射型XSS--又称HTML注入反射型XSS,又称“非持久性XSS”,只是将用户输入的数据“反射”到浏览器,即黑客往往需要引诱攻击才能成功用户“点击”恶意链接。通过点击恶意链接,攻击者可以成功获取用户的隐私数据。如:“窃取用户cookie信息”、“破坏页面结构”、“重定向到其他网站”、窃取内网IP等。那么既然反射型XSS也可以是HTML注入,那么其注入的关键自然是从前端开始——结束HTML页面:1、用户可以与浏览器页面进行交互(输入搜索关键词、点击按钮、点击链接等),但这些都需要诱导用户操作,说起来容易做起来难。2、用户输入的数据会被攻击者拼接成合适的html执行恶意js脚本。这个过程就像“一次反射”1.2StoredXSSStoredXSS,也称为“`persistentXSS`”,它与`reflectedXSS`不同的是,它会将用户输入的数据“存储”在攻击者的服务器上,具有很强的“稳定性”。例如:访问黑客撰写的包含恶意JavaScript代码的博文,黑客将恶意脚本保存到服务器。1.3DOMbasedXSS从效果上来说,也是“反射型XSS”,单独划分是因为它是通过修改页面的“DOM节点”形成XSS。例如:通过修改DOM节点上的绑定方法,用户通过点击、输入等无意中执行了这些方法,获取了用户的相关信息。输入并单击搜索。如果弹框显示123,说明存在XSS漏洞,即前端没有对用户输入的内容进行过滤。1.5XSS攻击方式1.Cookie劫持通过伪装一些`图片和按钮`来诱使用户操作,使网页执行攻击者的恶意脚本,使攻击者能够获取当前用户的Cookie信息2.构造GET和POST请求如果攻击者想要删除某网站的文章,首先获取当前文章的id,然后通过脚本`insertpicture`发送`GETrequest`,或者`constructform`,`XMLHTTPRequest`发送`POST请求`以达到删除本文的目的3.XSS钓鱼`钓鱼`这个词一般理解为起源于`社会工程学`。黑客使用该学科的概念在未经授权或不知情的情况下引诱用户。并获取对方的姓名、年龄、邮箱账号,甚至银行卡密码等隐私信息。例如:“某用户在某网站(已被攻击)操作黑客伪造的登录框,当用户在登录框中输入用户名(这里可能是身份证号等)和密码后,上传他的信息传给黑客的服务器(该用户的信息已从网站泄露)”4、通过第三方软件获取用户的真实IP地址。比如客户端已经安装了Java环境(JRE),可以调用`JavaApplet`1.6XSS防御方法1.HttpOnly原理:浏览器禁止页面上的Javascript通过HttpOnly属性访问cookies。(真正的解决方案是:XSS后cookie劫持攻击)现在已经成为“标准”解决方案:JavaEE给Cookie添加HttpOnly:response.setHeader("Set-Cookie","cookiename=value;Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");2、输入检查(XSSFilter)原理:使一些基于特殊字符的攻击无效。(常见的Web漏洞如XSS、SQLInjection等需要攻击者构造一些特殊字符)*输入校验的逻辑必须在服务端实现,因为客户端的校验也很容易被攻击者绕过,现有的普遍做法是在两端做同样的检查,客户端的检查可以阻断大部分误操作的正常用户,从而节省服务器资源。解决方法:检查是否包含“JavaScript”、“”等敏感字符。并对字符串中的<>:"&/'等特殊字符进行处理3.输出检测原则:一般来说,除了富文本输出,当变量输出到HTML页面时,使用编码或者转义到Solution来防御XSSattacks:*HTML代码的编码方式:HtmlEncode*PHP:htmlentities()和htmlspecialchars()两个函数*Javascript:JavascriptEncode(需要用""转义特殊字符,并且要求输出变量在引号内)*output在URL的路径(path)或搜索(参数)中,使用URLEncode4。更严格地说,除数字和字母外的所有字符均采用十六进制编码。2.跨站跨站请求伪造(CrossSitesRequestForgery)是指一种利用用户身份操作用户账号的攻击方式,即攻击者引诱用户访问某个页面,并以用户身份在第三方有害站点执行一次操作,泄露用户身份信息,和n攻击者可以利用这些伪造但真实的身份信息去某个网站冒充用户进行恶意操作。但是,攻击者只有预测到URL的所有参数和参数值,才能成功伪造请求(当然实际上他可以在安全站点以自己的身份操作,还是可以得到参数);反之,攻击者无法攻击成功。如何给用户带来危害参考上图,我们可以得出结论,要完成一次CSRF攻击,必须满足两个条件。用户登录可信网站A,在本地生成cookie。在不退出网站A的情况下访问有害网站B2.1CSRF攻击原理CSRF攻击是攻击者利用**`用户身份`**操作用户账号的一种攻击方式。比如电影《速度与激情5》中,吉赛尔用内衣获取了巴西老板的指纹,最后成功使用伪造的指纹,CSRF就是这个方法在网上的实现。2.2CSRF攻击方式1、浏览器的Cookie策略浏览器持有的策略一般分为两种:SessionCookie和临时Cookie。保存在浏览器浏览器进程的内存中,浏览器关闭时失效。Third-partyCookie,本地cookie。服务器在设置cookie时指定了ExpireTime。如果本地cookie过期,网站将要求用户重新登录。*在浏览网站的过程中,即使浏览器打开了Tab页,SessionCookie也是有效的,所以发起CSRF攻击是可行的。2、P3P头的副作用“P3PHeader”是“W3C”制定的一个隐私标准。全称是“隐私偏好平台”(PrivacyPreferencePlatform)。在某种程度上,浏览器将被允许发送第三方cookie。在IE下,即使是“
