防御XSS攻击-encode用户输入内容的重要性

一、什么是xss

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

二、举例说明

<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>encode防止xss攻击</title>
</head>
<body><input type="text" id="myInput" /><button οnclick="toSubmit();">提交</button><p id="myText" class="demo">hello world!</p><script type="text/javascript">function toSubmit(){var myText = document.getElementById("myText"),myInput = document.getElementById("myInput"),inputValue = myInput.value;myText.innerHTML = inputValue;}</script>
</body>
</html>


实例解释:这是网站生产环境抽离出来的简化代码。在公司的产品中,有很多输入框提供给用户输入一些自定义字符串。方便用户的同时,也会招惹一些黑客过来捣乱。最简单的就是xss注入攻击。
比如上面的实例,我在输入框直接输入内容 <h1> wall </h1>得到的结果如下:


这种结果,肯定不是产品所想要的。
进一步鼓捣测试,输入内容 <script>alert('wall');</script>


如果这段字符串是保存在数据库里。那么下次用户刷新这个页面,alert方法将会被执行,也就是会弹出 wall 这个信息。
因为能插入js代码,那这个想象空间就很大了,几乎很多事都能干。
最简单的就是用js获取访问当前网站的用户的document.cookie,然后ajax发送到信息收集网站,那么用户就等于在裸泳了。

三、解决办法

对字符串进行转义在输出

1、在存储进数据库的时候,对字符串进行encode
这种方式可以解决一部分问题,但是不够灵活。因为字符串有可能输出在html,也有可能输出在JavaScript代码中
2、在使用字符串的时候进行encode
这种方式是根据使用场景,在前端输出时,按需求进行encode,灵活应对

四、使用encode方法

  return html && html.replace ? (html.replace(/&/g, "&amp;") //转换&符号.replace(/ /g, "&nbsp;") // 转换空格.replace(/\b&nbsp;+/g, " ") // 转换多个空格为单个空格.replace(/</g, "&lt;") // 转换小于符号.replace(/>/g, "&gt;") // 转换大于符号.replace(/\\/g, "\") // 转换斜杠符号.replace(/\'/g, "'") // 转换单引号.replace(/\"/g, "&quot;") // 转换双引号.replace(/\n/g, "<br/>") // 转换换行符号.replace(/\r/g, "") //转换回车符号): html;
}

代码的作用是把对应的特殊符号,转换为转义字符,而不是直接插入html中。
这样,不管用户输入什么内容,都可以直接转换成字符串输出在html中。
比如再次输入内容 <script>alert('wall');</script>,得到的结果如下:


这样就可以防止xss攻击了

五、转义字符

最后附上完整的代码
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>encode防止xss攻击</title>
</head>
<body><input type="text" id="myInput" /><button οnclick="toSubmit();">提交</button><p id="myText" class="demo">hello world!</p><script type="text/javascript">function toSubmit(){var myText = document.getElementById("myText"),myInput = document.getElementById("myInput"),inputValue = myInput.value;myText.innerHTML = encodeHtml(inputValue);}function encodeHtml(html){return html && html.replace ? (html.replace(/&/g, "&amp;") //转换&符号.replace(/ /g, "&nbsp;") // 转换空格.replace(/\b&nbsp;+/g, " ") // 转换多个空格为单个空格.replace(/</g, "&lt;") // 转换小于符号.replace(/>/g, "&gt;") // 转换大于符号.replace(/\\/g, "\") // 转换斜杠符号.replace(/\'/g, "'") // 转换单引号.replace(/\"/g, "&quot;") // 转换双引号.replace(/\n/g, "<br/>") // 转换换行符号.replace(/\r/g, "") //转换回车符号): html;}</script>
</body>
</html>

使用encode方法防止XSS攻击相关推荐

  1. 前端xss攻击的原理

    概念说明 Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信 ...

  2. 保姆级教学 XSS攻击的过滤器

    对于XSS攻击,一种有效的防范措施是重写过滤器的方式来过滤一些有潜在风险的过滤器.     过滤策略:把特殊字符转为HTML实体编码,     这样存在数据库里较安全     返回给前端时会被js解析 ...

  3. PHP预防XSS攻击,ajax跨域攻击的方法

    对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlsp ...

  4. 有效预防xss_预防XSS攻击的一些方法整理

    XSS又称CSS,全称Cross SiteScript(跨站脚本攻击), XSS攻击类似于SQL注入攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原 ...

  5. XSS攻击绕过过滤方法大全(转)

    XSS攻击绕过过滤方法大全(约100种) 文章目录 XSS攻击绕过过滤方法大全(约100种) 1.XSS定位器 2.XSS定位器(短) 3.无过滤绕过 4.利用多语言进行过滤绕过 5.通过JavaSc ...

  6. post攻击 xxs_[BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误...

    一.问题描述 页面报错,没法下载 二.问题分析 1.初步分析 通过查看相关代码可以了解到文件下载的过程如下: 取到下载链接中的mid参数 对mid先后进行url解码和base64解码 将解码后的字符串 ...

  7. Nginx 防止SQL注入、XSS攻击的实践配置方法

    下班的时候,发现博客访问缓慢,甚至出现504错误,通过 top -i 命令查看服务器负载发现负载数值飙升到3.2之多了,并且持续时间越来越频繁直至持续升高的趋势,还以为是被攻击了,对来访IP进行了阈值 ...

  8. 解决SQL注入与XSS攻击

    最近接手之前同事的几个项目,公司利用扫描工具进行全项目扫描,发现了部分项目代码存在安全漏洞,所以需要进行项目代码修复以避免有人恶意攻击.这个任务自然而然的就落到我手上.在这里记录一下操作的过程. 扫描 ...

  9. WEB三大攻击之—XSS攻击与防护

    From:https://www.daguanren.cc/post/xss-introduction.html XSS的背景与介绍 背景 随着互联网的发展,网站经历由单纯的只读模式到web2.0兴起 ...

最新文章

  1. JS ES6 实用笔记
  2. 《强化学习周刊》第30期:Deep Mind开展人机交互的新试点研究、MIT提出神经进化优化框架...
  3. linux 内存 实例,内存管理与使用实例
  4. 【MFC】MFC消息映射(二)
  5. ansible基本模块使用
  6. js怎么图表在html中显示,使用Charts.js在HTML5中创建图表
  7. 获得OnOK退出控制
  8. 树状结构搜索功能_ICLR 2020 高分论文!利用稀疏多层次Transformer结构获取语法树!...
  9. 【笔记】android 系统常用user id列表
  10. 如何在计算机里打开ps,传授电脑psd文件用什么软件打开
  11. 通达信交易服务器修改,通达信修改快捷键实现一键涨停买卖。
  12. lisp绘制直齿圆柱齿轮_直齿圆柱齿轮的知识及其画法
  13. 腾讯云域名购买和域名解析教程
  14. 《前端圈技术论坛-腾讯互娱专场》观后感
  15. 玩客云刷Armbian详细教程
  16. 3d打印【遇到的问题】--卷边、倒塌、slic3r
  17. Job Shop Schedule 生产调度问题 (一) 简介
  18. 解读电力调度、电力市场、技术创新,国网南网新型电力系统行动方案
  19. 软考-嵌入式系统设计师:[知识产权与标准化:笔记(七)]
  20. 学会使用debug模式调试代码

热门文章

  1. PHP导出身份证号问题
  2. vue图片的动态绑定
  3. HTML 与 CSS学习笔记(全)
  4. Slf4j的使用与配置,Lombok Slf4j
  5. 网付:智慧数字经营代理怎么样?能不能做?
  6. mysql组织机构树迭代查询
  7. 发布新一代音视频技术架构,网易云信夯实头部玩家地位
  8. 恐怖黎明稳定服务器,恐怖黎明服务器不匹配 | 手游网游页游攻略大全
  9. 面试: 1.表达能力、性格、基本情况
  10. Nginx配置ssl证书(https证书)