计算机网络(安全)| 前端安全🥑🥑常遇的XSS和CSRF问题以及解决方案

1,361 阅读4分钟

一、什么是XSS攻击-跨站脚本攻击

跨站脚本攻击(Cross-Site-Scripting)但是缩写是css,重名,所以改为XSS

XSS是跨站脚本攻击,恶意攻击者在web页面中插入恶意的script代码,当用户访问该页面时,恶意的script会执行,达到恶意攻击的目的

XSS的攻击方式就是“教唆”网站去执行本来不存在于这个网页中的前端代码

二、XSS的危害

1.窃取网页浏览中的cookie值

2.劫持流量实现恶意跳转

3.配合csrf攻击完成恶意请求

三、xss的分类

反射型XSS:

“反射”主要指的是服务器把恶意代码反射注入到浏览器端,攻击是一次性的

攻击步骤:

  • 攻击者在url后面的参数中加入恶意攻击代码
  • 当用户打开带有恶意代码的url链接的时候,网站的服务器将恶意代码从url中取出,然后拼接到html中返回给浏览器端
  • 用户浏览器接受到后相应并解析代码,其中的恶意代码也会被执行到

常见的反射型XSS:

  • 恶意链接

存储型XSS:

  • 攻击是持久性的

攻击步骤:

  • 攻击者将恶意代码存放到目标网站的数据库中
  • 用户浏览目标网站的时候,网站服务器从数据库中把恶意代码取出,然后拼接到html后返回给浏览器
  • 浏览器接受到响应后解析并执行,其中恶意代码也会被执行

如何解决:

  • 后端对提交的数据进行过滤
  • 前端做一些处理,对script等标签,将特殊字符替换成html编码等

DOM-based型xss:

攻击步骤:

  • 攻击者构造出特殊的url,其中url中含有恶意代码
  • 用户打开含有恶意代码的url
  • 用户浏览器响应解析并执行,前端使用js取出url中恶意代码并执行

四、解决方案

1.cookie安全策略

2.X-XSS-Protection设置

3.XSS防御HTML编码

4.XSS 防御HTML Attribute编码

5.XSS防御之javascript编码

6.XSS 防御之 URL 编码

7.XSS 防御之 CSS 编码

8.开启CSP网页安全政策防止XSS攻击

五、sql注入

在登录界面的时候,都需要输入用户名和密码,如果我输入的密码是‘or’ ‘123’ = ‘123’,在我们查询数据库的时候,拼接以后的sql语句是select * from user where username =''and password ='' or '123' ='123',这样用户名和密码的校验是没有意义的。

sql注入攻击:sql语句伪造参数,然后对参数拼接以后形成xss攻击的sql语句,最后就会导致数据库被攻击了。

解决方案:

  • 使用预编译语句,伪造的参数到达服务器端的时候只是简单的字符串,不会形成sql攻击
  • 数据库中的密码不应该明文存储,最好采取加密的方式

六、什么是CSRF- 跨站请求伪造

跨站请求伪造(Cross-Site-request-forgery),攻击者盗用了你的身份,以你的名义发送恶意请求

七、CSRF的原理

首先用户C浏览并登录了受信任站点A; 登录信息验证通过以后,站点A会在返回给浏览器的信息中带上已登录的cookie,cookie信息会在浏览器端保存一定时间(根据服务端设置而定); 完成这一步以后,用户在没有登出(清除站点A的cookie)站点A的情况下,访问恶意站点B; 这时恶意站点 B的某个页面向站点A发起请求,而这个请求会带上浏览器端所保存的站点A的cookie; 站点A根据请求所带的cookie,判断此请求为用户C所发送的。 因此,站点A会报据用户C的权限来处理恶意站点B所发起的请求,而这个请求可能以用户C的身份发送 邮件、短信、消息,以及进行转账支付等操作,这样恶意站点B就达到了伪造用户C请求站点 A的目的。

八、完成CSRF攻击

登录受信任的网站A,并且在本地生成cookie 在不登出网站A的情况下,访问恶意网站B

九、如何防御

1.尽量使用POST,限制GET

  1. 将cookie设置成httpOnly

3.增加token

4.过referer进行识别

十、XSS和CSRF的区别

1.CSRF需要用户进行登录,XSS不需要

2.CSRF是利用网站本身的漏洞,去请求网站,XSS是向网站A中注入JS代码,然后执行代码,篡改网站A的内容

参考

浅谈XSS攻击的那些事(附常用绕过姿势)

web安全之XSS攻击原理及防范