详解XSS跨站脚本攻击原理及防御

详解XSS跨站脚本攻击原理及防御一 XSS 跨站脚本攻击跨站脚本攻击 英文全称是 CrossSiteScr 本来缩写是 CSS 但是为了和层叠样式表 CSS 有所区别 所以在安全领域叫做 XSS XSS 攻击 通常指黑客通过 HTML 注入 篡改了网页 插入了恶意的脚本 从而在用户浏览网页时 控制用户浏览器的一种攻击 在一开始 这种攻击的演示案例是跨域的 所以叫做 s 跨站脚本 但是发展到今天 由于 javascript 的强大功能以

一、XSS跨站脚本攻击

跨站脚本攻击,英文全称是Cross Site Script,本来缩写是CSS,但是为了和层叠样式表CSS有所区别,所以在安全领域叫做“XSS”。XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。在一开始,这种攻击的演示案例是跨域的,所以叫做“s跨站脚本”。但是发展到今天,由于javascript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要,但是由于历史原因,XSS这个名字却一直保留下来。
实施XSS攻击需要具备两个条件:
1、需要向web页面注入恶意html代码;
2、这些恶意代码能够被浏览器成功的执行。

二、XSS的分类

XSS根据效果的不同,可以分为以下几类:
1.反射型XSS:给用户发送页面或者链接,让用户点击来进行攻击,也叫做“非持久型XSS”。
     2.存储型XSS:把攻击存放在服务端,可能造成传播(比如博客系统,每个访问该页面的人都有可能被攻击),主动性更强。
比较常见的一种场景就是,黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的Javascript代码。黑客把恶意的脚本保存到服务器端,所以这种XSS攻击叫做“存储型XSS”。也叫做“持久型XSS”,因为从效果上来说,它存在的时间是比较长的。
     3.DOM型:本质上是反射型,但是是通过用户点击,修改原本dom元素的属性,构造攻击动作
反射型和dom型区别:
     反射型是构造好了攻击动作,然后就等你打开那个页面;dom型也是等你点击,但是不是页面,通过用户动作,把原来的动作注释掉,然后加上自己修改的动作。

三、XSS的作用

 什么是XSS Payload?XSS攻击成功后,攻击者能够对当前用户浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload“,实际上就是恶意攻击的JavaScript脚本,所有JavaScript脚本能实现的功能,XSS Payload都能做到。
一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起“Cookie劫持”攻击。
Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户。
总结XSS作用:
     1.可以获得cookie
     2.仿造get、post请求做一些动作
     3.获得用户的IP
     4.识别用户软件、浏览器
     5.通过钓鱼也可以骗到用户的用户名和密码这样

四、XSS的防御

1.对于截取cookie这样的操作可以在cookie上加上HttpOnly,这样js就不能访问cookie了。对于重要的cookie可以考虑加上该设置。
    一个Cookie的使用过程如下:
    step1:浏览器向服务器发起请求,这时候没有Cookie
    step2:服务器返回时发送Set-Cookie头,向客户端浏览器写入Cookie
    step3:在该Cookie到期前,浏览器访问该域下的所有页面,都将发送该Cookie。
2.输入检查。一般是查询特殊字符,比如『<』,『>』,『、』这样,可以选择对输入进行编码,或者是筛选掉这些字符。
3.没有绝对可以防止XSS攻击的方法,因为XSS比较灵活,任何语言或者框架设计不当都有可能存在漏洞。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223179.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:41
下一篇 2026年3月17日 下午2:41


相关推荐

  • OpenClaw部署全教程[项目代码]

    OpenClaw部署全教程[项目代码]

    2026年3月13日
    2
  • Sublime Text3 如何安装、删除及更新插件

    Sublime Text3 如何安装、删除及更新插件1、打开SublimeText3,按Ctrl+`(和qq输入法快捷切换冲突,可以修改qq的输入法切换热键)2、复制粘黏以下代码添加至命令行,然后回车(功能:安装插件的工具,有了它,以后安装其他插件更方便)importurllib.request,os;pf=’PackageControl.sublime-package’;ipp=sublime.inst…

    2022年7月11日
    23
  • 关于Http_build_query的用法

    关于Http_build_query的用法

    2021年11月8日
    49
  • fabricjs相关方法知识点

    fabricjs相关方法知识点fabricjs 相关方法知识点 1 获得画布上的所有对象 varitems canvas getObjects 2 设置画布上的某个对象为活动对象 canvas setActiveObj items i 3 获得画布上的活动对象 canvas getActiveObj 4 取消画布中的所有对象的选中状态 canvas discardActiv 如果这样不生效 可以使用 canvas discardActiv

    2026年3月19日
    2
  • 对《Java核心技术卷一》读者的一些建议

    对《Java核心技术卷一》读者的一些建议思想不会变 所以 Java 编程思想 还停留在第 4 版 2007 年 而技术是要更新迭代的 所以 Java 核心技术卷一 来到了第十版 2016 年 我们来看一下 Java 核心技术卷一 第十版的大纲 前九章 包括 Java 程序设计概述 Java 程序设计环境 Java 的基本程序设计结构 对象与类 继承 接口 lambda 表达式与内部类 异常 断言和日

    2026年3月19日
    2
  • COleVariant 和 CTime「建议收藏」

    COleVariant 和 CTime「建议收藏」获取当前时间。datetime=COleDateTime::GetCurrentTime();CTime和COleDateTime具有几乎同样的功能。与CTime相比,COleDateTime的优点在于它支持DWORD变量。COleDateTime使用的位数是双浮点的两倍,既然CTime只是简单地计算从1970年1月1日之后经过的秒数,所以到了2037年它将达到429496

    2022年7月18日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号