前端技术不断发展,安全性的问题也越来越受到关注。作为前端工程师,保障网络安全也越来越重要。

XSS攻击

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

攻击者在网站上植入非法的html或是JavaScript代码,将受害者重定向到一个被攻击者控制的恶意网站,在恶意网站中对用户的隐私(如cookie)进行盗取。

反射型XSS攻击

对用户的输入进行简单的浏览器反射。

常见的在网页端设置一个连接,当用户点击时,将跳转至被攻击的网站,实现反射XSS攻击。

来看例子

在本地设置一个静态页面html中有一个a的连接标签。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>XSS攻击</title>
</head>
<body><a href="http:127.0.0.1:3000">XSS攻击</a>//该连接指向另一危险页面
</body>
</html>

当点击连接后,将会跳转到收到控制的XSS页面。

const http = require('http')
http.createServer((req, res) => {res.writeHead(200, {'Content-Type': 'text/plain'})res.end('XSS 非法攻击')
}).listen(3000)
console.log("http:127.0.0.1:3000/")

存储型XSS攻击

存储型XSS攻击的用户将恶意脚本植入到服务器中,当其他用户访问网站时将会收到恶意脚本的攻击。

常见的场景就是博客或评论系统中,攻击者写下恶意的脚本发布,当其他用户访问时,浏览器将自动执行恶意脚本。

如下代码

攻击者即可在输入框中输入恶意代码植入服务器,进而实现存储型XSS攻击。

<input type="text" id="input">
<button id="btn">Submit</button>   <script>const input = document.getElementById('input');const btn = document.getElementById('btn');let val;input.addEventListener('change', (e) => {val = e.target.value;}, false);btn.addEventListener('click', (e) => {fetch('http://localhost:8001/save', {method: 'POST',body: val    //植入的恶意代码将会通过POST请求传递到服务器});}, false);
</script>

基于DOM的XSS攻击

基于DOMXSS攻击使用脚本对页面DOM进行修改,和反射型XSS一样,均是浏览器本身的行为。

<h2>XSS: </h2>
<input type="text" id="input">
<button id="btn">Submit</button>
<div id="div"></div>
<script>const input = document.getElementById('input');const btn = document.getElementById('btn');const div = document.getElementById('div');let val;input.addEventListener('change', (e) => {val = e.target.value;}, false);btn.addEventListener('click', () => {div.innerHTML = `<a href=${val}>testLink</a>`//在click事件后,产生DOM元素的改变。}, false);
</script>

XSS攻击的预防

  1. 使用HttpOnly防止cookie被盗用
    微软最早提出HttpOnly的概念,给cookie添加HttpOnly属性将会有效防止JavaScript代码对cookie的截获。
  2. 浏览器输入检查与转义
    永远不相信用户输入
    对用户的特殊输入进行转义。如Vue.js中的decodingMap
    // vuejs 中的 decodingMap
    // 在 vuejs 中,如果输入带 script 标签的内容,会直接过滤掉
    const decodingMap = {
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&amp;': '&',
    '
    ': 'n'
    }
  3. 服务器输出检查与转义
    除了对用户输入转义外,对服务器的输出也要进行转义处理。除了保留富文本编辑器外,其他输出都需转义。

CSRF攻击

跨域站点请求伪造(Cross Site Request Forgery)

攻击者非法获取用户cookie,伪造用户的登录状态在用户不知情的情况下,实现对服务器的未授权请求。

场景:浏览器同时打开安全网站和一个危险网站时,在危险网站中攻击者通过用户本地浏览器为媒介,获取用户的cookie值进而与安全网站进行通信,实现跨域站点请求伪造。

如下代码

<p>CSRF 攻击者准备的网站:</p>
<img src="http://www.c.com:8002/content/delete/87343">

当用户访问时攻击者将CSRF的攻击携带在img标签,将会发起相应的delete请求,形成跨域站点请求伪造。

在此,攻击者并没有获取cookie的详细值,仅仅使用cookie就实现了请求伪造。

CSRF的预防

  1. 验证码
    在网络请求是附带验证码,最有效。
  2. 验证RefererHttp的头部携带Referer,用于验证发送请求的来源地址,借此可检查出合法的源。
    if (req.headers.referer !== 'http://www.c.com:8002/') {
    res.write('csrf 攻击');
    return;
    }
  3. 验证token
    HTTP首部添加由后端随机生成的token值,以此来防止CSRF的攻击。

SQL注入

用户输入参数中输入SQL语法,破坏原有的SQL结构,来实现相应的攻击。

主要原因

  • 编写SQL语句是单纯使用字符串拼接。
  • 对用户输入并未足够过滤便添加到SQL语句中。

猛虎分享

一起进步

共勉
有需要学习资料的小伙伴可以关注微信公众号趣玩前端每日分享前端技术知识点。可进微信群和我们一起学习,一起探讨,还可以领取最新的前端学习资源。

2020前端最新学习资源(一)​mp.weixin.qq.com

前端怎么获取cookie的值_作为前端你必须要了解的安全性问题!相关推荐

  1. 前端怎么获取cookie的值_京东购物小程序cookie方案实践(附Demo)

    一.前言 早期为了解决"会话保持"的需求,社区中出现了「cookie 方案」并最终成为 W3C 标准:当某个网站登录成功后,客户端(浏览器)收到一个 cookie 标识(文本)并保 ...

  2. 前端 js 获取cookie的值

    getCookie(name) {var arr = document.cookie.split(";");for (var i = 0; i < arr.length; i ...

  3. 前端给后端传递数据的时候,有些后端自己可以获取到的值应该由前端传递吗?

    前端给后端传递数据的时候,有些后端自己可以获取到的值应该由前端传递吗? 场景: 1.比如我向后端传递一个学生做的试卷. 2.后端需要我把学生的答案和标准答案(在获取试卷的时候给我的,我知道很扯淡)同时 ...

  4. WEB前端 -- JavaScript获取cookie

    JavaScript 通过 document.cookie 来获取 cookie . 遗憾的是,document.cookie 只能获取所有 cookie 的集合,不能获取单个 cookie . 例如 ...

  5. asp.net javascrip获取session的值_一篇文章搞定 Django Cookie 与 Session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  6. web前端怎么获取cookie?新手前端开发者需了解

    在前端开发中有些情况下需要获取用户的cookies,这样当用户下次登录网站的时候就不需要重复的去调整功能,那么你知道如何去实现吗? 先放一段完整的JS代码,后面都有功能备注,大家可以自己先看一下. 下 ...

  7. web前端怎么获取cookie?

    在前端开发中有些情况下需要获取用户的cookies,这样当用户下次登录网站的时候就不需要重复的去调整功能,那么你知道如何去实现吗? 先放一段完整的JS代码,后面都有功能备注,大家可以自己先看一下. 下 ...

  8. html 获取cookie的值,js从Cookies里面取值的简单实现

    工作过程中遇到一个Js从Cookies里面取值的需求,Js貌似没有现成的方法可以指定Key值获取Cookie里面对应的值,参阅网上的代码,简单实现如下: 1. 服务端代码,Page_Load里面Coo ...

  9. 前端JS获取ModelMap的值 2020-09-03

    问题描述: 前端获取ModelMap的值 Controller: @GetMapping("/turnDispatch/{workNo}")public String turnDi ...

最新文章

  1. do一下来了一个redux
  2. 用mendeley在word中插入文献_Mendeley在Word添加工具栏和插入和删除文献的方法 | 科研动力...
  3. retinaface 训练笔记
  4. 修改SQL Service数据库排序规则
  5. 使用15年,竟未得授权?真功夫遭李小龙女儿起诉索赔,回应:我们也很疑惑...
  6. linux 脚本 等待,shell tel脚本中执行等待实现
  7. dnspod ddns 下载_简约时尚休闲女装毛衣针织衫春装详情页_psd素材免费下载_ 750*13450像素(编号:24815329)...
  8. 达观杯文本分类——基于N-gram和LogisticRegression
  9. Google I/O 还没开始,我们先来看点什么?
  10. 案例分析 | 贝壳找房:自我颠覆的整合式创新引领产业数字化
  11. 人工智能相关专利分析: 会比其他常见的计算机软硬件领域更难申请吗?
  12. laravel 发送邮件
  13. PocketPC常用程序和设置打开命令参数列表
  14. 七夕快到了,你怎么还不向我表白?
  15. iOS 火星坐标相关整理及解决方案汇总
  16. openwrt固件的下载编译流程
  17. 【数学建模】2019A题 高压油管的压力控制器(附带优秀论文资源文档下载)
  18. 如何在Windows 10 IoT Core中添加其他语言的支持,如中文
  19. 如何通俗易懂地解释卷积?
  20. ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server

热门文章

  1. 设置虚拟工作空间_建筑狂想曲 | 建筑学习生活空间虚拟设计工作营最终评图
  2. 三星android pro,够大才能爽 三星Galaxy Note Pro评测
  3. 各种喜好配置【2021.10】
  4. Oracle-11g安装与使用
  5. C++中map的用法
  6. 51nod 最长公共子序列测试 【LCS+回溯】
  7. JAVA学习笔记--4.多线程编程 part5.这些年的那些坑
  8. 查看MS SQL Server数据库每个表占用的空间大小
  9. C# 对Excel的样式操作
  10. 安全获取QueryString的值类库下载