Web的前端设计的安全问题

了解并防范来自前端的攻击
服务器君一共花费了159.408 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

随着前端技术的发展,安全问题已经从服务器悄然来到了每一个用户的的面前,盗取用户数据,制造恶意的可以自我复制的蠕虫代码,让病毒在用户间传播,使服务器当掉。更有甚者可能会在用户不知觉得情况下,让用户成为攻击者,这绝对不是骇人听闻。富客户端的应用越来越广,前端的安全问题也随之增多,今天就简单介绍下一些常见的攻击方式和预防攻击办法。

常见攻击

1. XSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。但是随着前端技术的不断进步富客户端的应用越来越多,这方面的问题越来越受关注。举个简单例子:假如你现在是sns站点上一个用户,发布信息的功能存在漏洞可以执行js 你在 此刻输入一个 恶意脚本,那么当前所有看到你新信息的人的浏览器都会执行这个脚本弹出提示框 (很爽吧 弹出广告 :)),如果你做一些更为激进行为呢?后果难以想象。

2. CSRF(Cross Site Request Forgery),跨站点伪造请求。顾名思义就是通过伪造连接请求在用户不知情的情况下,让用户以自己的身份来完成攻击者需要达到的一些目的。csrf 的攻击不同于xss csrf 需要被攻击者的主动行为触发。这样听来似乎是有"被钓鱼"的嫌疑哈哈。

多窗口浏览器这这方面似乎是有助纣为虐的嫌疑,因为打开的新窗口是具有当前所有会话的,如果是单浏览器窗口类似ie6 就不会存在这样的问题,因为每个窗口都是一个独立的进程。举个简单例子 : 你正在玩白社会, 看到有人发了一个连接,你点击过去,然后这个连接里面伪造了一个送礼物的表单,这仅仅是一个简单的例子,问题可见一般。

3. cookie劫持,通过获取页面的权限,在页面中写一个简单的到恶意站点的请求,并携带用户的cookie 获取cookie后通过cookie 就可以直以被盗用户的身份登录站点。这就是cookie 劫持。举个简单例子: 某人写了一篇很有意思的日志,然后分享给大家,很多人都点击查看并且分享了该日志,一切似乎都很正常,然而写日志的人却另有用心,在日志中偷偷隐藏了一个对站外的请求,那么所有看过这片日志的人都会在不知情的情况下把自己的cookie 发送给了 某人,那么他可以通过任意一个人的cookie 来登录这个人的账户。

我们该怎么做?

大致可以分为两类:1.一般用户。2.网站开发人员。

首先我们来说说做为一个一般的web产品使用者,很多时候我们是被动的,是在不知情的情况下被利用的。那么我们可以:

  1. 对于安全级别较高的web应用访问需要打开一个独立浏览器窗口。
  2. 对于陌生人发布的链接最好也是复制然后在新开的窗口中打开,当然最好的办法就是无视。

对于开发人员来说我们得从相对详细的一些角度来分析:对于xss 攻击 特点是攻击者的代码必须能获取用户浏览器端的执行权限,那么代码是从哪里来的呢,想要杜绝此类攻击出现 其实可以在入口 和出口 进行严格的过滤,这样的双保险应当说99% 的类似问题就被我们解决掉了,另外的1% 是那些蹩脚的浏览器带来的后遗症,相信在未来这种问题会越来越少的。

xss漏洞的形式

  1. 恶意代码值被作为某一标签的内容显示,如果输入的是html 则html会被解析。例如你输入用户名,更新后用户名会显示到页面中的某一个标签内。如果你输入的是
  2. popper.w<script src="hack.js" type="text/javajscript"></script>
    

    那么如果不做过滤直接显示到页面, 会引进一个第三方的js 代码并且会执行。

    策略:在不需要html输入的地方对html标签及一些特殊字符( " < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。

  3. 恶意代码被作为某一标签的属性显示(通过用 " 将属性截断来开辟新的属性或恶意方法)。这种情况往往是是开发人员为了实现功能可能会在某些dom标签上记录一些用户输入的信息例如你输入的用户名,会在页面中的标签中以 title 的形式出现。这时候如果你输入的是精心设计的内容,那么看看这个:
  4. <a title="popper.w" onclick="alert(1)">popper.w" onclick="alert(1)</a>
    

    这里我实际上输入的内容是"popper.w" onclick="alert(1)",当然你可以在上边写更多的内容。

    策略:对属性中可能存在截断的一些字符进行过滤属性本身存在的,单引号和双引号都需要进行转码。

  5. 恶意代码被作为html代码本身显示 (常见的html编辑器) 这种情况存在的问题最多,不再这里举例子了。
  6. 策略:最好对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。

  7. 恶意代码被作为一段json字符串显示 (通过 变量截断 创造新的 恶意的js 变量 甚至是可执行的代码) 这个问题的关键是用户输入的信息可能会成为页面中js 代码的一部分。
  8. 策略:对属性中可能存在截断的一些字符进行过滤,属性本身存在的单引号和双引号都需要进行转码。

crsf 和cookie 劫持

特点:隐蔽性比较高。有些时候是先利用xss 漏洞,然后再做欺骗的。

策略:

  1. 通过 referer、token 或者验证码来检测用户提交。
  2. 尽量不要在页面的链接中暴漏任何与用户唯一号(用户id)有关的信息。
  3. 对于用户修改、删除、提交的操作最好都使用post 操作。
  4. 避免全站通用的cookie 严格的设置cookie的域。

ok 就写到这里~

上边讲的都是一些比较常见的安全问题,主要是从js hack 方面来讲的,随着前端技术的不断发展进步,更多的安全问题可能会展现在我们面,对于开发者来说大多数的问题是可以在开发阶段避免的,所以可怕的不是hack 可怕的是我们对自己的产品安全的松懈~。

本文地址:http://www.nowamagic.net/librarys/veda/detail/302,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/302

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《致加西亚的信》 阿尔伯特·哈伯德(Hubbard.E.) (作者), 赵立光 (译者), 艾柯 (译者)

《致加西亚的信(经典盒装版)》内容简介:美西战争爆发以后,美国必须立即与古巴起义军首领加西亚取得联系,并获得他的合作。但当时,加西亚身在古巴的深山里——没有人知道他的确切地点,所以没法与他取得联系。这时,有人向总统推荐一个名叫罗文的人,说他有办法找到加西亚,而且也只有他才能找得到。他们找来罗文,交给他一封写给加西亚的信。三周后,罗文徒步走过一个危机四伏的国家,最终把那封信交给了加西亚。 此后,罗文的事迹被传为佳话,“送信”成为了敬业、忠诚、勤奋的象征,罗文便成了每个领导都想找到的人和每个员工都应该学习和效仿的榜样。

更多计算机宝库...