【记】web安全问题整理记录

注:部分内容来源于https://www.cnblogs.com

记录web常见的几种安全问题

常见的web攻击方式

1.XSS(Cross Site Scripting)跨站脚本攻击

XSS是跨站脚本攻击(Cross Site Scripting)的简称,恶意攻击者往web页面中插入可运行的脚本,当用户浏览该web页面时,嵌入到该web页面的恶意脚本就会被执行,从而达到恶意攻击用户的特殊目的。其危害主要有窃取cookie、劫持前端逻辑、发送请求、偷取用户的资料、网站钓鱼...

恶意脚本一般可以注入在html,dom属性,js代码中,富文本中.如下所示:

//HTML节点内容注入
<div><script>alert(1);</script></div>  
//DOM属性注入
<img src='/images/1.png' onerror='alert(1);'>  
//javascript代码
<script>
    var a = '1';alert(1);''
</script>
//富文本是html标签,文字,以及样式的集合,很容易实现HTML节点内容注入和DOM属性注入,有被攻击的风险

注入渠道一般有三种,反射型(url参数直接注入)和存储型(存储到DB后读取时注入),还有dom属性。例如注入如下脚本,跳转到指定网站,盗取cookie等.<script>window.location.href="http://www.***.com";</script>

防御方式:

一.浏览器自带防御机制,主要应对反射型攻击(HTML内容或属性):http响应头中自动添加x-xss-protection,值为0(关闭),1(打开),默认打开.

二.对不可信的数据源,进行特殊字符的转义.如以下字符的转义'&'转为'$amp','<'转为'<','>'转为'>'等.

//封装成的公共方法
//转义 
function HTMLEncode(str) {
    var str = str.replace(/&/g,"&")
                 .replace(//g,">")
                 .replace(/"/g,""")
                 .replace(/'/g,"'")
                 .replace(/\//g,"/")
                 .replace(/ /g," ");
     return str;
}
//反转义
function HTMLDecode(str) {
     var str = str.replace(/&/g,"&")
                  .replace(/</g,"<")
                  .replace(/>/g,">")
                  .replace(/"/g,"\"")
                  .replace(/'/g,"\'")
                  .replace(///g,"/")
                  .replace(/ /g," ");
     return str;
}

三.将重要的cookie标记为http only

四.CSP内容安全策略(Content Security Policy)

 Content-Security-Policy: default-src 'self' 只允许加载本站资源
 Content-security-Policy: img-src https://   只允许加载https协议图片
 Content-security-Policy: child-src 'none'   不允许加载任何来源框架
 //同时meta中也支持设置Content-Security-Policy
 <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">

2.CSRF(Cross Site Request Forgy)跨站请求伪造

跨站请求伪造,是一种常见的web攻击,他利用用户以登录的身份,在用户不知情的情况下,以用户的名字完成非法操作.实施流过如下:

1.用户登录了站点a,并在本地记录了cookie

2.a站后端确认身份,登录成功,cookie中存在用户的身份认证信息

3.b站前端页面向a站后端发起请求,带着a站的cookie信息(身份认证信息),请求成功

防御方式:

1.禁止第三方网站携带本网站的cookie信息:设置same-site属性,same-site属性有两个值,Strict(所有的第三方请求都不能携带本网站的cookie)和Lax(链接可以,但是form表单提交和ajax请求不行)

2.本网站前端页面添加验证信息:使用验证码或者添加token验证.

验证码:当发起请求时,前端需要输入本网站页面的验证码信息,后端对验证码进行验证,验证码正确才会进行相关操作(存取数据等)

token验证:a站前端将token存在当前页面中(比如表单中的input隐藏域,meta标签或者任何一个dom的属性)和cookie中,当请求a站后端的时候,参数中带上这个token字段,a站后端将参数中的token和cookie中的token做对比, 相同则验证通过,不同则请求不合法.

不管是验证码还是token验证,原理都是一样的,在a站前端页面加入验证,当第三方网站请求a站后端时,即使能携带a站cookie,但是因为没有经过a站的前端页面从而拿不到验证信息,也会导致请求失败

3.referer验证:禁止来自第三方的请求


3.点击劫持--clickjacking

点击劫持是一种视觉欺骗的攻击手段,攻击者将需要攻击的网站通过iframe嵌套方式嵌入自己的网页中,并将iframe设置为透明的,在页面中透露出一个按钮诱导用户点击 通过用于各种网站,使用iframe技术,点击进入一个其他网址,导致用户信息泄密

防御方式:

1.点击劫持防御.X-FRAME-OPTIONS 是一个HTTP响应头,在现代浏览器有一个很好的支持,这个HTTP响应头就是为了防御iframe嵌套的点击劫持攻击.该响应头有三个值可选,分别是:

一.DENY:表示页面不允许通过iframe的方式展示

二.SAMEORIGIN:表示页面可以在相同域名下通过iframe的方式展示

三.ALLOW-FRO:表示页面可以在指定来源的iframe中展示

 欢迎转载:转载时请注明本文出处及文章链接

标签:


添加新评论

captcha
请输入验证码