浅谈网络安全--xss、csrf、csp

1、XSS

概念

跨网站指令码(英语:Cross-site scripting,一般简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它容许恶意使用者将程式码注入到网页上,其余使用者在观看网页时就会受到影响。这类攻击一般包含了HTML以及使用者端脚本语言。php

举例

咱们知道留言板一般的任务就是把用户留言的内容展现出来。正常状况下,用户的留言都是正常的语言文字,留言板显示的内容也就没毛病。然而这个时候若是有人不按套路出牌,在留言内容中丢进去一行:html

<script>alert("hey!you are attacked")</script>
复制代码

那么留言板界面的网页代码就会变成形如如下:web

<html>
    <head>
       <title>留言板</title>
    </head>
<body>
<div id="board">
    <script>alert("hey!you are attacked")</script>
</div>     
    </body>
</html>
复制代码

那么别的用户加载到留言板的时候,就会出现这个弹出框;浏览器

其余能够干的事情

攻击者固然不会仅仅弹出一个alert框,既然能够插入脚本,那么也能够作一些其余的事情,例如:安全

一、窃取网页浏览中的cookie值,为接下来的CSRF作准备bash

二、劫持流量实现恶意跳转cookie

三、注入脚本得到其余信息session

如何绕过通常网站的过滤规则

实际应用中web程序每每会经过一些过滤规则来组织代有恶意代码的用户输入被显示,如下是一些经常使用的xss攻击绕过过滤的一些方法:frontend

一、大小写绕过xss

http://192.168.1.102/xss/example2.php?name=<sCript>alert("hey!")</scRipt>
复制代码

二、利用过滤后返回语句再次构成攻击语句来绕过

http://192.168.1.102/xss/example3.php?name=<sCri<script>pt>alert("hey!")</scRi</script>pt>
复制代码

发现问题了吧,这个利用原理在于只过滤了一个script标签。 三、并非只有script标签才能够插入代码

http://192.168.1.102/xss/example4.php?name=<img src='w.123' onerror='alert("hey!")'>
复制代码

其余绕过方式能够参考知乎用户Snake专栏文章;

防范手段

一、既然是代码注入攻击,那咱们能够对敏感字符作转义,以下:

function escape(str) {
    str = str.replace(/&/g, "&amp;");
    str = str.replace(/</g, "&lt;");
    str = str.replace(/>/g, "&gt;");
    str = str.replace(/"/g, "&quto;");
    str = str.replace(/'/g, "&##39;");
    str = str.replace(/`/g, "&##96;");
    str = str.replace(/\//g, "&##x2F;");
    return str
}
复制代码

二、CSP(接下来会谈到)

三、过滤诸如<script><img><a> 标签

三、为防止cookie盗用,咱们还能够在Http响应头设置HttpOnly

2、CSP

上文提到了能够用CSP来防止XSS攻击,那CSP究竟是什么呢?

概念

内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。不管是数据盗取、网站内容污染仍是散发恶意软件,这些攻击都是主要的手段;

举例

前段时间王二想在知乎控制台下插入一段脚本,以下:

Alt text

则会提示报错,而在有些网站(百度,Google)不会报错;

这是由于在知乎遵循了CSP,在网站的http头部定义了 Content-Security-Policy

Alt text

CSP 本质上是创建白名单,规定了浏览器只可以执行特定来源的代码;

那么即便发生了xss攻击,也不会加载来源不明的第三方脚本;

3、CSRF

概念

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,一般缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登陆的Web应用程序上执行非本意的操做的攻击方法。跟跨网站指令码(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

举例

一、同一个浏览器下

假如一家银行用以执行转账操做的URL地址以下:

http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName
复制代码

那么,一个恶意攻击者能够在另外一个网站上放置以下代码:

<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman">
复制代码

若是有帐户名为Alice的用户访问了恶意站点,而她以前刚访问过银行不久,登陆信息还没有过时,那么她就会损失1000资金。

二、结合xss使用

上文说了xss能够结合csrf使用;

在经过xss得到目标用户的cookie后,打开目标网站的登陆界面,调出Chrome控制台的Application面板,调至cookie选项卡:

Alt text

再把目标用户的cookie填进去,再把过时时间调长一些,

完成以后再次刷新页面,发现已经不是以前的登陆界面了,而是登陆后的界面。至此,一个从cookie窃取到利用的过程就已完成。

防范手段

对于上面说的第一个例子:

一、检查Referer字段:HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪一个地址。在处理敏感数据请求时,一般来讲,Referer字段应和请求的地址位于同一域名下。

二、添加校验token

对于上面说的第二个例子,则作好防止xss攻击的相应措施。

参考文章:

知乎用户Snake专栏文章

wikiwand xss

wikiwand csrf

InterviewMap

'Coocier'的开发小记

原文参考

王玉略的我的网站

相关文章
相关标签/搜索