最近在看《白帽子讲Web安全》这本书,对于XSS有了一定的了解。现在对于书中关于防御XSS的4种方法做一些总结与解说。

XSS的本质

XSS事件发生在网站前端,在相关的数据替换到前端页面中时,新旧数据结合,混淆了页面原本的语义,产生了新的语义。以下面这种情况为例:

test

将$var的值注入到页面中,本来是为了提供一个跳转用的url地址。但若将$var的值设为" οnclick=alert(1)\,则以上HTML变为了:

test

点击test文字后,会进行alert输出,即改变了原有的HTML语义。

HtmlEncode

当$var变量出现在HTML标签或属性中时,XSS可分别通过以下两种方法来进行注入。

在HTML标签中,如下所示:

$var

若不对$var进行任何处理,当$var的值为时,在一些老式的浏览器中,HTML代码如下:

则这些浏览器会执行alert的js操作,实现了XSS注入。

在HTML属性中,如下所示:

test

若不对$var进行任何处理,当$var的值为"> 时,HTML代码如下:

">test

则浏览器会执行alert的js操作,实现了XSS注入。

为了防御这两种XSS,可以采用对$var变量进行HtmlEncode的方法。HtmlEncode的作用是将$var的一些字符进行转化,使得浏览器在最终输出结果上是一样的,但能够防止注入的JavaScript执行。

HtmlEncode支持的转换举例如下:

& --> &

< --> <

> --> >

为例,对$var进行HtmlEncode后的结果为:

以上HTML在浏览器中的显示结果就是,实现了将$var作为纯文本进行了输出,且不引起JavaScript的执行。

JavaScriptEncode

当$var变量出现在

var x = "$var";

若不对$var进行任何处理,当$var的值为";alert(1);"时,JavaScript代码如下:

var x = "";alert(1);""

则浏览器会执行alert的js操作,实现了XSS注入。

为了防御这种XSS,可以采用对$var变量进行JavaScriptEncode的方法。JavaScriptEncode的作用可以是将$var中除了数字、字母外的所有字符进行十六进制化处理,使得浏览器最终输出结果上是一样的,但能够防止注入的JavaScript执行。

";alert(1);"

为例,对$var进行JavaScriptEncode后的结果为:

\x22\x3balert\x281\x29\x3b\x22

其中\x28代表(,\x29代表),以上字符串在JavaScript环境中即为"alert(1)",内容不变,但XSS并不执行。

CSSEncode

当$var变量出现在

css中xss的注入,在现在的浏览器中基本已经被禁止了,因此也比较少见。

URLEncode

当$var变量出现在url跳转地址中时,XSS可通过以下方法来进行注入,示例如下:

test

若不对$var进行任何处理,当$var的值为" οnclick="alert(1);return false;"时,代码如下:

test

此时就会阻止了url页面跳转,实现了XSS注入。

为了防御这种XSS,可以采用对$var变量进行URLEncode的方法。URLEncode的作用是将字符转化为%HH的形式,支持的转换举例如下:

空格 --> %20

< --> %3c

> --> %3e

以上述的

" οnclick="alert(1);return false;"

为例,URLEncode后的结果如下:

%22%20onclick%3d%22alert%281%29%3breturn%20false%3b%22

原有代码变为:

test

此时便阻止了XSS的注入。

如果上述例子改为:

test

即$var指代了完整的url地址,则可能出现以下两种情况:

test

test2

这两种代码都能够注入XSS,为了防御这些情况,可以先检测$var中是否包含url的protocol字段,如果没有,就加上,再对整个url进行URLEncode处理。

结语

以上是我的一些经验与心得,若有不足之处,请予指正。希望这篇文章对你有所帮助_。

有效预防xss_4类防御XSS的有效方法相关推荐

  1. vue xss 存在_默认情况下,Vue是否为XSS提供安全性或防御XSS?

    我试图找出如何保护, 角度的 Vue 反应 抵抗XSS攻击.当我访问Angular官方文档时, , 它说: 为了系统地阻止XSS错误,默认情况下,Angular将所有值视为不可信.当通过属性,属性,样 ...

  2. 了解与防御XSS攻击

    一. XSS是什么 XSS攻击全称跨站脚本攻击(Cross Site Scripting),是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写 ...

  3. spring mvc xss html,note/SpringMvc防御XSS实践.md at master · yangc91/note · GitHub

    SpringMvc防御XSS实践 项目在漏洞扫描时发现xss漏洞, 本以为是常见漏洞,网上有很多解决方案,应该能很快搞定,但实际上文章看了不少,却并未找到十分"顺手"的解决方案. ...

  4. 如何防止通过url攻击_什么是XSS攻击?如何防御XSS攻击?

    大家上午好,大家经常听到XSS攻击这个词,那么XSS攻击到底是什么,以及如何防御大家清楚么?今天,小墨就给大家讲一下:XSS攻击的定义.类型以及防御方法.什么是XSS攻击? XSS攻击全称跨站脚本攻击 ...

  5. 怎么访问原生php类,关于如何利用php的原生类进行XSS

    在CTF中,这一类型的题目一般会在代码中给出反序列化点,但是却找不到pop链,类似于[BJDCTF 2nd]xss之光这一题,通过GitHack下载代码后,发现如下: 我们可以看到题目代码给出了反序列 ...

  6. 简述xss漏洞原理及危害?xss漏洞有哪些类型?xss漏洞哪个类型危害最大?如何防御xss漏洞

    Xss漏洞原理:服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了JS代码并直接返回给客户端执行,从而实现对客户端的攻击目的. 危害: 1.窃取用户Cookie 2.后台增删改文章 3.XS ...

  7. 浅谈如何防御xss攻击

    笔前闲聊 最近都在写一些防守型文章,是因为笔者在最近的学习当中发现一些当初以攻击者角度学习的知识在某些特殊的场合下会表现的有点不够全面,总是感觉某些知识点联系不在一起,所以最近总是写一些防御型文章来把 ...

  8. XSS攻击,XSS预防(前端安全),XSS练习

    XSS攻击,XSS预防(前端安全),XSS练习 文章目录 XSS攻击,XSS预防(前端安全),XSS练习 1:什么是XSS 2:XSS 分类 2.1:存储型 XSS 2.2:反射型 XSS 2.3:D ...

  9. php+防御+xss,PHP的防御XSS注入的终极解决方案

    PHP的防御XSS注入的终极解决方案[信息安全][Hack] 一:PHP直接输出html的,可以采用以下的方法进行过滤: 1.htmlspecialchars函数 2.htmlentities函数 3 ...

  10. 7 怎么查看文件夹容量_C盘(系统盘)磁盘剩余容量告警?如何解决与预防,C盘容量告急解决方法简单汇总!...

    大家好,我是FreeRonin. 前几天号主分享了几篇文章,大家没看的可以了解一下:没准哪天你会用上. 嫌网盘下载文件太慢,这有免费的文件分享方法助你快速分享与下载! 国内好用的搜索引擎简单汇总 号主 ...

最新文章

  1. Python源码怎么读,听听顶级爬虫工程师的建议
  2. 威斯康辛大学《机器学习导论》2020秋季课程完结,课件、视频资源已开放
  3. SAP RETAIL 特征参数文件(Characteristic Profile) I
  4. linux 查看san链路状态,linux系统运行状态检查
  5. 用java异常完成丢色子功能,java自动投掷骰子设计报告(含源码)
  6. CodeForces 474.D Flowers
  7. owin 怎么部署在云中_使用Boxfuse轻松在云中运行Spring Boot应用程序
  8. B cannot be cast to java.sql.Blob
  9. 2017.12.1T19_B2_1zuoye
  10. php 加tab键,php 生成Tab键或逗号分隔的CSV
  11. codeforce #164 div2
  12. Mac OS X中Apache开启ssl
  13. Java学习笔记 --- IDEA
  14. 企业微信SDK接口API调用-通过手机号或微信好友添加客户
  15. 领峰:现货白银怎么样,怎么炒才正确
  16. xftp显示隐藏的文件夹及传输文件发生错误问题
  17. bootstrap文档第一遍
  18. 给你的2D游戏添加3D效果
  19. 常见的12个深度学习面试问题(提高篇)
  20. 设计模式之一工厂模式

热门文章

  1. tomcat 改端口 运维最最重要的就是有看日志的习惯
  2. 【国际IT专场】搞编程后悔没早知道的Linux命令
  3. 原生ES-Module在浏览器中的尝试
  4. python--反射机制
  5. selenium+webDriver环境搭建和学习基础(java环境)
  6. gtShell - 为你常用的目录建立标签并快速跳转
  7. Bootstrap模态框的基本使用(复制可用)
  8. 调试mysql语句_Mysql sql 语句调试
  9. Matlab2012b license失效解决办法
  10. shell脚本中变量的赋值