美文网首页程序员
Web安全学习笔记

Web安全学习笔记

作者: Ekolia | 来源:发表于2018-05-12 04:09 被阅读0次

之前做项目写的那叫一个随意。。由于都是小项目和练手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和网址影噶就差不多了。。

参考资料

相关文章

  • Web安全学习笔记

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

  • web安全的学习笔记

    1.1安全渗透环境准备 环境准备 靶机 owasp渗透机 kali集成 vmwarekali owasp联网方式~...

  • Linux系统Web应用安全加固

    今天学习了阿里云大学的《Linux系统Web应用安全加固》课程,将记录的笔记整理如下,以供后续学习。下图是思维导图...

  • web安全之SQL注入

    2018/07/06 23:41 慕课网web安全之SQ之注入课程学习笔记 什么是SQL注入? 如何寻找SQL注入...

  • 《图解HTTP》(下)

    学习笔记。 第7章 确保Web安全的HTTPS 7.1 HTTP的缺点 通信使用明文(不加密),内容可能被窃听 不...

  • web安全学习

    一、HTTP抓包、修改 http请求、响应流程 浏览器插件(FireFox):Firebug、Tamper Dat...

  • web安全学习

    https://websec.readthedocs.io/zh/latest/[https://websec.r...

  • Web Security | 1 Web安全简介

    本文是《Web安全深度剖析》的读书笔记(工具) 如今的Web应该称为Web应用程序,与早期的Web(静态网页为主)...

  • 零基础如何成为一个黑客

    我建议先从web安全开始入门,学习web安全首先就要了解前端知识。 Html/css/js/php/都是学习前端所...

  • 2月17笔记

    第4天web学习笔记,已标明今天的笔记 有道云笔记

网友评论

    本文标题:Web安全学习笔记

    本文链接:https://www.haomeiwen.com/subject/fjccdftx.html