当前位置: 首页 > news >正文

前端高级面试题-安全相关

1 XSS

跨⽹站指令码(英语: Cross-site scripting ,通常简称为: XSS )是⼀种⽹站应⽤程式的安全漏洞攻击,是代码注⼊的⼀种。
它允许恶意使⽤者将程式码注⼊到⽹⻚上,其他使⽤者在观看⽹⻚时就会受到影响。这类攻击通常包含了 HTML 以及使⽤者端脚
本语⾔
XSS 分为三种:反射型,存储型和 DOM-based

如何攻击

  • XSS 通过修改 HTML 节点或者执⾏ JS 代码来攻击⽹站。
  • 例如通过 URL 获取某些参数
<!-- http://www.domain.com?name=<script>alert(1)</script> -->
<div>{{name}}</div>
上述 URL 输⼊可能会将 HTML 改为 <div><script>alert(1)</script></div> ,这样⻚⾯中就凭空多了⼀段可执⾏脚本。这种攻
击类型是反射型攻击,也可以说是 DOM-based 攻击

如何防御

最普遍的做法是转义输⼊输出的内容,对于引号,尖括号,斜杠进⾏转义
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
}

通过转义可以将攻击代码 <script>alert(1)</script> 变成
// -> &lt;script&gt;alert(1)&lt;&##x2F;script&gt;
escape('<script>alert(1)</script>')
对于显示富⽂本来说,不能通过上⾯的办法来转义所有字符,因为这样会把需要的格式也过滤掉。这种情况通常采⽤⽩名单过滤的办法
,当然也可以通过⿊名单过滤,但是考虑到需要过滤的标签和标签属性实在太多,更加推荐使⽤⽩名单的⽅式
var xss = require("xss");
var html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>'
// -> <h1>XSS Demo</h1>&lt;script&gt;alert("xss");&lt;/script&gt;
console.log(html);
以上示例使⽤了 js-xss 来实现。可以看到在输出中保留了 h1 标签且过滤了 script 标签

2 CSRF

跨站请求伪造(英语: Cross-site request forgery ),也被称为 one-click attack 或者 session riding ,通常缩写为CSRF 或者 XSRF ,是⼀种挟制⽤户在当前已登录的 Web 应⽤程序上执⾏⾮本意的操作的攻击⽅法CSRF 就是利⽤⽤户的登录态发起恶意请求

如何攻击

假设⽹站中有⼀个通过 Get 请求提交⽤户评论的接⼝,那么攻击者就可以在钓⻥⽹站中加⼊⼀个图⽚,图⽚的地址就是评论接⼝
<img src="http://www.domain.com/xxx?comment='attack'"/>

如何防御

  • Get 请求不对数据进⾏修改
  • 不让第三⽅⽹站访问到⽤户 Cookie
  • 阻⽌第三⽅⽹站请求接⼝
  • 请求时附带验证信息,⽐如验证码或者 token

3 密码安全

加盐

对于密码存储来说,必然是不能明⽂存储在数据库中的,否则⼀旦数据库泄露,会对⽤户造成很⼤的损失。并且不建议只对密码单纯
通过加密算法加密,因为存在彩虹表的关系
  • 通常需要对密码加盐,然后进⾏⼏次不同加密算法的加密

// 加盐也就是给原密码添加字符串,增加原密码⻓度
sha256(sha1(md5(salt + password + salt)))
但是加盐并不能阻⽌别⼈盗取账号,只能确保即使数据库泄露,也不会暴露⽤户的真实密码。⼀旦攻击者得到了⽤户的账号,可以通过
暴⼒破解的⽅式破解密码。对于这种情况,通常使⽤验证码增加延时或者限制尝试次数的⽅式。并且⼀旦⽤户输⼊了错误的密码,也不
能直接提示⽤户输错密码,⽽应该提示账号或密码错误

前端加密

虽然前端加密对于安全防护来说意义不⼤,但是在遇到中间⼈攻击的情况下,可以避免明⽂密码被第三⽅获取
http://www.lryc.cn/news/102247.html

相关文章:

  • 【前缀和】560.和为 K 的子数组
  • 【Docker】安全及日志管理
  • 基于x-scan扫描线的3D模型渲染算法
  • LeetCode36.Valid-Sudoku<有效的数独>
  • Linux中的pause函数
  • CommonCollections6链分析
  • 优化基于tcp,socket的ftp文件传输程序
  • MySQL 数据库 【增删查改(二)】
  • 力扣 -- 978. 最长湍流子数组
  • 甘特图 Dhtmlx Gantt
  • iOS 应用上架流程详解
  • Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)
  • 【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务
  • 【C语言初阶】指针篇—上
  • 基于FasterRCNN深度学习网络的车辆检测算法matlab仿真
  • 机器学习深度学习——多层感知机
  • Django模型将模型注释同步到数据库
  • STM32 Flash学习(二)
  • kotlin获取泛型集合的类型信息
  • AQS源码解析
  • 关于在VS2017中编译Qt项目遇到的问题
  • Python web实战 | 使用 Flask 实现 Web Socket 聊天室
  • Android10 Recovery系列(一)隐藏recovery菜单项
  • 选好NAS网络储存解决方案,是安全储存的关键
  • AnimateDiff论文解读-基于Stable Diffusion文生图模型生成动画
  • centos7安装tomcat
  • 【C#教程】零基础从入门到精通
  • opencv rtsp 硬件解码
  • 机器学习-Gradient Descent
  • MySql003——SQL(结构化查询语言)基础知识