安全类

Posted bestchenyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全类相关的知识,希望对你有一定的参考价值。

1、CSRF:跨站请求伪造,cross-site request forgery

2、CSRF攻击原理:

  技术分享图片

  (1)用户登录网站A

  (2)网站A下发cookie

  (3)用户访问网站B

  (4)网站B中有引诱点击,指向网站A中有漏洞的接口

  (5)点击之后,浏览器上传cookie至网站A

必要条件:1、用户要在注册网站登录过 2、网站A有漏洞接口

3、防御措施:

  (1)Token验证:访问接口,浏览器自动生成cookie,但是没有手动上传token,token是你访问网站的服务器向本地存储一个token,访问时没带token就不能通过验证。引诱连接会自动携带cookie而不会携带token

  (2)Refer验证:判断页面来源

  (3)隐藏令牌:放在HTTP head中

4、XSS:跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了html以及用户端脚本语言。

XSS 常见攻击方法

1、绕过 XSS-Filter,利用 <> 标签注入 Html/javascript 代码;

2、利用 HTML 标签的属性值进行 XSS 攻击。例如:<img src=“javascript:alert(‘xss’)”/>;(当然并不是所有的 Web 浏览器都支持 Javascript 伪协议,所以此类 XSS 攻击具有一定的局限性)

3、空格、回车和 Tab。如果 XSS Filter 仅仅将敏感的输入字符列入黑名单,比如 javascript,用户可以利用空格、回车和 Tab 键来绕过过滤,例如:<img src=“javas cript:alert(/xss/);”/>

4、利用事件来执行跨站脚本。例如:<img src=“#” onerror= “alert(1)”/>,当 src 错误的视乎就会执行 onerror 事件;

5、利用 CSS 跨站。例如:body {backgrund-image: url(“javascript:alert(‘xss’)”)}

6、扰乱过滤规则。例如:<IMG SRC=“javaSCript: alert(/xss/);”/>

7、利用字符编码,通过这种技巧,不仅能让 XSS 代码绕过服务端的过滤,还能更好地隐藏 Shellcode;( JS 支持 unicode、eacapes、十六进制、十进制等编码形式);

8、拆分跨站法,将 XSS 攻击的代码拆分开来,适用于应用程序没有过滤 XSS 关键字符(如<、>)却对输入字符长度有限制的情况下;

9、DOM 型的 XSS 主要是由客户端的脚本通过 DOM 动态地输出数据到页面上,它不依赖于提交数据到服务器,而是从客户端获得DOM中的数据在本地执行。容易导致 DOM 型的 XSS 的输入源包括:Document.URL、Location(.pathname|.href|.search|.hash)、Document.referrer、Window.name、Document.cookie、localStorage/globalStorage

XSS 如何防御?

从上面的介绍可知,XSS 漏洞是由于对用户提交的数据没有经过严格的过滤处理造成的,所以防御的原则就是不相信用户输入的数据,对输入进行过滤,对输出进行编码。

1、使用 XSS Filter

针对用户提交的数据进行有效的验证,只接受我们规定的长度或内容的提交,过滤掉其他的输入内容。比如:

  • 表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。

  • 过滤或移除特殊的 html 标签:<script><iframe>等。

  • 过滤 js 事件的标签:onclickonerroronfocus等。

2、html 实体

当需要往 HTML 标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行 HTML Entity 编码,在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。 html 实体的存在是导致 XSS 漏洞的主要愿意之一,因此我们需要将实体转化为相应的实体编号。

显示结果描述实体编号
  空格 &nbsp ;
< 小于 &lt ;
> 大于 &gt ;
& &amp ;
‘‘ 引号 &quot ;

3、JavaScript编码

这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,除了上面的那些转义之外,还要附加上下面的转义: 
 转成 \\

/ 转成 /

; 转成 (全角;)

注意:在对不可信数据做编码的时候,不能图方便使用反斜杠 对特殊字符进行简单转义,比如将双引号 转义成 ,这样做是不可靠的,因为浏览器在对页面做解析的时候,会先进行HTML解析,然后才是JavaScript解析,所以双引号很可能会被当做HTML字符进行HTML解析,这时双引号就可以突破代码的值部分,使得攻击者可以继续进行XSS攻击;另外,输出的变量的时候,变量值必须在引号内部,避免安全问题;更加严格的方式,对除了数字和字母以外的所有字符,使用十六进制xhh 的方式进行编码。

4、Http Only cookie

许多 XSS 攻击的目的就是为了获取用户的 cookie,将重要的 cookie 标记为 http only,这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,但是在脚本中却不能访问 cookie,这样就避免了 XSS 攻击利用 js 的 document.cookie获取 cookie。

 


以上是关于安全类的主要内容,如果未能解决你的问题,请参考以下文章

elasticsearch代码片段,及工具类SearchEsUtil.java

CPNtools协议建模安全分析---实例变迁标记

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段

为啥片段类应该是公开的?

片段内部静态类和gradle问题