前端安全之 xss crsf sql注入攻击与防御

一.xss攻击(Cross Site Scripting)

百度百科:XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。攻击类型分为“反射型攻击” 和 “存储型攻击”

反射型攻击:将有危害的xss代码写入服务器,服务器把xss代码返回浏览器,浏览器把xss当成js解析并执行的的攻击方式称为反射型攻击:

前端安全之 xss crsf sql注入攻击与防御_第1张图片
node环境获取xss代码请求


前端安全之 xss crsf sql注入攻击与防御_第2张图片
在浏览器中地址栏中输入xss代码,从服务器返回并执行,完成一次攻击

 存储型攻击:存储型xss攻击与反射型xss攻击的差别仅在于,提交的xss代码会存储在(数据库,内存,文件系统等),下次请求目标时不用再次提交xss代码。

(比如:评论的评论列表展示的网页,当有用户评论文章时写入有危害的xss代码时,这条评论的xss代码会被写入数据库,在渲染到评论列表时,xss代码会执行,完成攻击)

xss攻击的危害:xss攻击可以获得页面的dom节点,和修改页面内容,因此xss攻击可以盗用cookie,篡改页面内容,获取个人隐私信息如银行卡密码等。

xss攻击的防御:

1.转义,对敏感字符转义,把 > 字符转为 ‘>’ < 转为‘<’


前端安全之 xss crsf sql注入攻击与防御_第3张图片
对>和<符号进行转义

2.过滤,过滤敏感标签或标签属性

二.CSRF(Cross-site request forgery)

  百度百科:    CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性

csrf危害 :利用用户登陆态登陆,用户不知情,盗用用户资金,损害网站信誉等。

css攻击自述

csrf攻击过程:用户访问a网站并登陆,a网站返回cookie给用户,用户在没有退出a网站的情况下,去访问攻击网站b,b攻击网站就会携带用户的cookie去攻击目标(a)网站,完成scrf攻击。

scrf攻击防御:要想防御scrf攻击,首先要知道scrf攻击的特点 。


前端安全之 xss crsf sql注入攻击与防御_第4张图片

  1.攻击网站b携带目标网站(a ) 的cookie

可用cookie中的sameSite属性防止第三方请求,但只有chrome支持

  2.攻击网站不访问目标网站(a)的前端

    方法一:可用验证码防御。    但会影响用户使用体验

     方法二:可用token,在后端生成一个随机数,一份放在cookie中,一份存在浏览器中,后台控制只有这两

      个数相等的时候才可以进行留言等 操作。缺点:如果用户在浏览器中对该网站打开多个界面,会只 

       有最后一个页面能有效的操作

  3.请求头中的referer属性为b网站

      验证请求头中的的referer属性,禁止来自第三方网站的请求

三:sql攻击

定义:输入参数未经过滤,然后直接拼接到sql语句当中,解析执行,达到预想之外的效果称为sql攻击

举个栗子:下面这种情况:我在输入用户账号的时候,在后面加入了一个#号

前端安全之 xss crsf sql注入攻击与防御_第5张图片

这样如果后代的执行 的mysql语句就会是这样:                                                                                                  select * from userdatabase where username=1550976562# and password=' ',使用过mysql的用户都知道#号是mysql的注释,这样后面的 and password=' '就会被当做注释,不会被执行,因此攻击者就可以不用密码登录你的网站了。

对SQL注入的防御方法主要有:

1. 字符串长度验证,仅接受指定长度范围内的变量值。sql注入脚本必然会大大增加输入变量的长度,通过长度限制,比如用户名长度为 8 到 20 个字符之间,超过就判定为无效值。

2. 对单引号和双"-"、下划线、百分号等sql注释符号进行转义

3. 对接收的参数进行类型格式化,如id参数值获取后,进行int类型转换

4. 永远不要使用动态拼装SQL,推荐使用参数化的SQL或者直接使用存储过程进行数据查询存取。sql注入最主要的攻击对象就是动态拼装的SQL,通过参数化查询可以极大减少SQL注入的风险。

5. 永远不要使用管理员权限的数据库连接(sa、root、admin),为每个应用使用单独的专用的低特权账户进行有限的数据库连接。

6. 不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。这样对方就算获取到整个表的数据内容,也没什么价值。

7. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息输出到日志而不是在页面中展示。

8. 做好XSS跨站攻击的防护,防止攻击者伪造管理员信息进入系统后台

9. 不管客户端是否做过数据校验,在服务端必须要有数据校验(长度、格式、是否必填等等)

你可能感兴趣的:(前端安全之 xss crsf sql注入攻击与防御)