Web安全学习笔记

之前做项目写的那叫一个随意。。由于都是小项目和练手demo,完全没有管过安全相关方面的知识。。回头重新总结一下吧

目前比较常见的安全问题大概有这几种:

  • XSS Cross Site Script 跨站脚本攻击
  • CSRF Cross-site request forgery 跨站请求伪造
  • SQL注入
  • DDOS Distributed Denial of Service 分布式拒绝服务

比较少见的,还是了解一下的:

  • iframe风险
  • 上传漏洞
  • 点击劫持
  • 钓鱼

一个个来说吧~

XSS

简单来说就是页面执行了不被期望解析的代码,恶意web用户将代码植入到提供给其它用户使用的页面。比如评论内容为死循环的script代码段,get参数为js代码等。
跨站脚本攻击的危害:窃取cookie、放蠕虫、网站钓鱼 ...
跨站脚本攻击的分类主要有:存储型XSS、反射型XSS、DOM型XSS

解决办法就是把所有前段输出数据转义,保证不被解析。
原则:宁死也不让数据变成可执行的代码,不信任任何用户的数据,严格区分数据和代码。

保存的数据库的时候,for PHPer,

addslashes,stripcslashes这两个函数可以为预定义',",\打上(去掉)'\'。
htmlentities或者htmlspecialchars会将预定义的字符转化为html实体,也就是让浏览器输出html代码。

js中,html实体应直接加入innerHTML里面不会被解析,会被显示成代码,如果是html字符的话就需要加入textContent里面,可以用这个来写过滤函数。

// 防止中文乱码,但我好像没事
htmlentities($str, ENT_COMPAT , "UTF-8");

原代码

<script>alert(1)<\/script>
<p>1<p>在</p>11</p>

转化输出大概是这样的

&lt;script&gt;alert(1)&lt;\/script&gt;
&lt;p&gt;1&lt;p&gt;222&lt;/p&gt;11&lt;/p&gt;

CSRF

可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......
造成的问题包括:个人隐私泄露以及财产安全。简单来说,通过客户浏览器的cookie等个人信息去以客户身份行动。
Web的隐式身份验证机制只能保证请求是来自于你的浏览器,不能保证是不是用户操作的。

简单来说CSRF攻击可以分成两个部分,在可信任的访问网站登陆并生成cookie,在不登出的情况下有意或者无意的访问危险网站。这里的危险网站访问不一定是一个网页,可以是一个请求,一个资源的地址。

一般策略有几种,验证 HTTP Referer 字段;添加 token 并验证;重要操作用post,验证码等。

验证 HTTP Referer 字段

根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。但这个属性是网页浏览器的,安全性依赖于第三方(即浏览器)上,旧浏览器上是可以修改的。
其次,有些用户有关闭Referer的隐私需求,并正常访问时,会被认为是CSRF攻击。

这种方法的好处就是简单易行,不改变任何源代码,直接写一个拦截的中间件就行了,缺点也很明显,过度依赖于第三方。但 Referer Check 可以用来监控 CSRF 攻击。

添加 token 并验证

token是两端都保存的,标志用户的长字符串。IBM提到的做法是将token完全是页面获取,镶嵌进form表单的所有url里面成为参数(post则是隐藏input value)。
这样对这个页面的dom操作比较复杂,影响性能,尤其是异步的话要更新更多form。

当然我们还是可以存在cookie里面的。那么问题来了,如果存在cookie里,岂不是和不用token没区别了?

区别还是有的,一般的cookie是直接用作身份凭证参数,但用token的时候可以把cookie当成存储的地方(cookie可以加HttpOnly)!
需要的时候表单从cookie中找到需要的token在辅以算法(如md5)或者参数调用,达到目的。
当然也可以放在请求的header里作为参数。

Token 应该是一次性的,即每次请求成功后要更新 Token,这样也能刷新登陆时间。比较好用的库:jwt。

验证码

重要步骤可以使用,不过尽量少用,比较烦人。。

SQL注入

就是防止储存的数据对你的服务器,和业务造成印象。还是那几个,引号,特殊符号等,根本的手段就是参数化查询或者做词法分析。

还是那个原则,永远不要相信用户的输入。不要使用动态拼装SQL语句。可以调用已有的高级参数化sql类实现,内部一般都会有自动检测转译语法。

ps: 为应用创建单独的用户来使用数据库,控制权限。

DDOS 攻击

指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。

高防服务器

高防服务器主要是指能独立硬防御 50Gbps 以上的服务器,能够帮助网站拒绝服务攻击,定期扫描网络主节点等,这东西是不错,就是贵~

黑名单

设置黑名单,此方法秉承的就是“错杀一千,也不放一百”的原则,会封锁正常流量,影响到正常业务。

DDoS 清洗

DDoS 清洗会对用户请求数据进行实时监控,及时发现DOS攻击等异常流量,在不影响正常业务开展的情况下清洗掉这些异常流量。

CDN 加速

CDN 服务将网站访问流量分配到了各个节点中,这样一方面隐藏网站的真实 IP,另一方面即使遭遇 DDoS 攻击,也可以将流量分散到各个节点中,防止源站崩溃。

这个是真的一点经验都没有。。。也不能实践很尴尬,就先了解一下吧。

iframe风险

广告需求的iframe可能会因为到期域名更换等原因形成威胁。项目中目前还没用到过iframe这类元素,无经验。。

上传漏洞

上传的文件是有可能是可执行的脚本或者其他的非期望的文件,对服务器构成威胁。
应该严格控制上传的类型,而不只是上传文件的后缀,友情提问@简书:为什么我头像会动,不是限制jpg,jpeg,png吗?(滑稽)。

此外,上传的文件保存路径的所有文件,非特殊情况文件路径应该设定不可被执行(nignx设置)。

 location /protected/ {
    deny all;
  }

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。
在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。
此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

还可以单独设置文件服务器的域名:由于浏览器同源策略的关系,一系列客户端攻击将失效。

点击劫持和钓鱼

这两个都差不多,算是比较久远的攻击手法,都是模拟出虚假页面来获取用户的登录账号和密码。一个利用覆盖遮盖,一个是利用路由跳转到钓鱼网站。
高级一点的都可以牵扯到xss攻击上。一般的话注意一下https和网址影噶就差不多了。。

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,561评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,218评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,162评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,470评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,550评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,806评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,951评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,712评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,166评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,510评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,643评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,306评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,930评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,745评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,983评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,351评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,509评论 2 348

推荐阅读更多精彩内容