XSS攻击原理及预防方法

news2025/1/15 13:11:52

XSS攻击通常都是通过跨站指令代码攻击网站的后台漏洞。它和信息隐性代码攻击攻击的目标不同。前者是透过从Web前端输入信息至网站,导致网站输出了被恶意控制的网页内容,使得系统安全遭到破坏。而后者则是输入了足以改变系统所执行之SQL语句内容的字串,使得系统最终达到攻击的目的。
  
但从一般角度来看,这两种攻击手法基本上是相通的。他们都是透过系统对前端输入信息检验不严谨,利用刻意制造出来的输入信息,来让系统产生不在预期内的有害行为。
  
要更彻底地防止网站受到跨站指令代码攻击和信息隐性代码攻击,系统就必须对于客户端输入信息做到足够的检核并保护好网页内容,避免产生意外的有害行为。
在这里插入图片描述

过滤输入信息有效吗?

当要防备这类型的攻击时,大多数人直觉想到的方式,便是对使用者所提供的输入信息进行过滤。在面对信息隐性代码攻击时,许多人会想到针对输入信息中,可能会含有的SQL关键字串或字元进行过滤,例如,使用者的输入信息中若含有特殊符号例如单引号,那么便可能制造出危险的SQL语句,因此,许多程序设计者便会想到要针对特殊符号进行过滤,来杜绝信息隐性代码的攻击。而这种过滤的方法,其实不难规避,例如,针对单引号,有心人士还是可以利用信息库服务器支持的特殊写法,将单引号字元替换成其他的型式,使得escape的程序失效。

同样的,面对跨站指令代码攻击,许多程序设计者首先会想到的,也是针对有可能造成疑虑的使用者信息进行过滤。例如,针对尖括号、或者SCRIPT字串进行过滤,如果使用者的输入信息中含有可疑的字符串,则进行改写或禁止使用。这种针对特定的目标进行筛选过滤的方式,可以称为黑名单式的过滤,因为,程序是先列出不能出现的对象清单,然后进行过滤。

当然,在跨站指令代码攻击中,如果想利用黑名单式的过滤方式,当然也是行不通的。因为,单是javascript这个字串,有心人士就可以产生在HTML中等价、但是字串形式不为javascript的写法。例如,使用#x的十六进位字元表示方式,来表示javascript这个字串中的每一个字元。由于改写形式太多了,这使得想要利用黑名单的方式,几乎是不可能的事。

因此,无论何种攻击,想要有更严密的防备,在信息的过滤上,都应该采取白名单式的过滤。而这正和黑名单相反,它不是列出不被允许的对象,而是列出可被接受的对象。

以正向表列的方式管制

在面对信息隐性代码攻击时,我们建议针对每个栏都明确定义出它该有的形式,例如日期栏就只能出现数字和斜线,而ID栏仅能出现英文字母及底线等等。如此一来想要透过信息植入有害的组成,就不是那么容易可以办到了。

对于同样需要对输入信息进行检核的跨站指令代码攻击来说,要做到输入信息的过滤,最好的策略也是基于白名单来过滤。例如,允许使用者输入HTML语法的地方,若仅允许输入图片。这么一来,想要规避过滤的规则,难度就比较高了。

当然,采取较严格的白名单政策,程序在编辑难度上比较高,此外,允许使用者信息输入的形式也就更为受限,但这是为了安全必须付出的代价。

将网页内容编代码,提升防御力

除了针对输入信息进行白名单式的过滤之外,针对输出的页面内容进行编码,也是能派上用场的技巧。输入信息的过滤是针对可疑的信息进行防范,而针对输入进行编码,则是让可能造成危害的信息变成无害的。

有许多程序语言都推出了防范跨站指令代码攻击的程序库,协助程序设计者针对HTML输出内容进行编码。例如PHP的htmlentities()或是htmlspecialchars()、ASP的Server.HTMLEncode()、ASP.NET的Server.HtmlEncode()等等。让专门的程序库来处理输入内容的编码,也可以减少程序设计者自行开发的额外成本,同时也能提供更为完善的防备考虑。

彻底分析程序代码可能的弱点

在编写程序时,如果能够留意输入信息的输出,以及输出页面内容的编码,相信可以增加不少防范的强度。但是,针对既有的代码,若存在跨站指令代码攻击的漏洞,又该如何察觉并进行防范呢?基本上,你可以采取一个系统性的分析方法。

如果要审视你的代码是否具有跨站指令代码攻击的问题,首先,你必须要列出你的网站程序中所有接收自使用者端送出信息的地方。包括网站程序所读取表格中的每个栏位、来自于网址中的查询字串、cookies值、HTTP的标头等等。因为,不要忘了,所有来自于使用者的信息“都是不被信任的”。

找到了每个接收使用者端信息的地方后,便可以逐一追踪每个信息在应用程序中的流向,检验所接收到的信息,最终是否会反映到输出的页面结果中。这中间,你可能直接把接收来的信息稍微加工后,就当做输出结果送出去,先把所接收到的信息储存在信息库或档案中,于日后才做为输出结果送出。

如果找出来的信息最终会成为输出页面的一部份,那就应该检查这份信息是否足够“干净”,也就是说,你是否有针对这份信息进行足够的过滤或在输出时加上了编码的动作。如果没有,那这份信息就有可能成为跨站指令代码攻击被发动的点。也就是说,你应该针对这份信息的输入及输出,进行相对应的处理。透过以上的步骤,有助于你审视既有的程序代码的问题。

除此之外,检查你的JavaScript程序中,动用到innerHTML以及document.write()的地方,是否有安全疑虑。另外,在JavaScript程序中使用eval(),同样有可能造成安全问题。eval()函数允许在浏览器上直接将传入该函数的参数做为JavaScritp算式或是可执行的语句。如果eval()所接收的参数值,是来自于使用者输入的信息,那么可以造成的危机就大了,这也就是为什么都建议不要使用eval()的原因,因为太容易形成安全性的漏洞了。

跨站指令代码攻击的确是十分难以防守的攻击形式,一旦不小心,就有可能造成很严重的安全事故。希望可以透过这里,带给你基本的认知。关于跨站指令代码攻击其中还充满许多高深的探讨和技巧,不在本文范围之内,有兴趣的朋友可以留言咨询博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/117591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【解决方案】一种简单且实用的化工厂人员定位系统

化工厂人员定位系统是推进我国安全生产状况持续稳定好转的有效载体,对化工行业的科学发展、安全发展起着重要的促进作用。 化工厂安全责任重于泰山,一旦发生事故后果不堪设想。目前,化工企业还存在着缺乏实时监督、缺乏主动干预、缺乏精准救援…

SpringCloud(9)— Elasticsearch聚合和自动补全

SpringCloud(9)— Elasticsearch聚合和自动补全 一 数据聚合 1.聚合的分类 聚合(aggregations)可以实现对文档数据的统计,分析,运算。常见的聚合有三种: 1.桶聚合(Bucket&#x…

磁场传感器调研报告

目录 一.磁场传感器 二.磁场传感器工作原理 2.1霍尔效应原理 2.2霍尔传感器工作原理 三.磁场传感器分类介绍 3.1磁阻敏感器 3.2磁性液体加速度传感器 3.3磁性液体水平传感器 四.磁性传感器的应用 4.1汽车 4.2消费类电子产品 4.3工业智能控制和自动化 五、总结 一.…

iftop工具(网卡流量监控软件)的使用

直接运行iftop&#xff0c;不加任何参数 界面显示 界面上面显示的是类似刻度尺的刻度范围&#xff0c;为显示流量图形的长条作标尺用的。 中间的< >这两个左右箭头&#xff0c;表示的是流量的方向。 TX&#xff1a;发送流量 RX&#xff1a;接收流量 TOTAL&#xff1a;总…

open-local部署之后k8s的kube-scheduler挂掉问题

搭建一套k8s集群之后&#xff0c;本地存储化方案选择了阿里巴巴的open-local&#xff0c;没部署open-local&#xff0c;k8s 的kube-scheduler一切正常&#xff0c;只要按照官方文档部署了open-local&#xff0c;k8s的kube-scheduler就会挂掉&#xff0c;不是被kill掉&#xff…

Go的并发模型

Go的并发模型 文章目录Go的并发模型一、GO并发模型的三要素1.1 操作系统的用户空间和内核空间1.2 线程模型的实现&#xff08;1&#xff09;用户级线程模型&#xff08;2&#xff09;内核级线程模型&#xff08;3&#xff09;两级线程模型1.3 GO线程实现模型MPG二、什么是gorou…

选择题

目录 1058:选择题 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 代码长度限制: 时间限制: 内存限制: 思路: 1.选择题结构体 1.2 选择题结构体代码 2.判断选择题是否做对函数 2.1 判断选择题是否做对函数代码: 3.选择题的输入…

【并发】深入理解JMM并发三大特性(二)

t【并发】深入理解JMM&并发三大特性&#xff08;二&#xff09; 我们在上一篇文章中提到了JMM内存模型&#xff0c;并发的三大特性&#xff0c;其中对可见性做了详细的讲解&#xff01; 这一篇文章&#xff0c;将会站在硬件层面继续深入讲解并发的相关问题&#xff01; …

将整数字符串转成整数值

题目&#xff1a; 给定一个字符串 str&#xff0c;如果str符合日常书写的整数形式&#xff0c;并且属于 32 位整数的范围&#xff0c;返回 str 所代表的整数值&#xff0c;否则返回 0 。 举例&#xff1a; str "123" 返回 123 str "023" 返回 23 …

springboot整合之统一异常处理

特别说明&#xff1a;本次项目整合基于idea进行的&#xff0c;如果使用Eclipse可能操作会略有不同&#xff0c;不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

FFmpeg简单使用:过滤器 ---- h264_mp4toannexb

H264有两种封装方式&#xff1a;字节流AnnexB格式 AVCC格式。 1. AnnexB格式 ---- 用于实时播放 开始前缀&#xff08;00000001或000001&#xff09;&#xff0b;NALU数据  绝大部分编码器的默认输出格式   一共有两种起始码start_code    ①3字节0x000001  单帧多s…

C++面向对象特性——多态

C面向对象之多态什么是多态&#xff1f;为什么使用多态&#xff1f;虚函数的定义虚函数的实现机制哪些函数不能被设置为虚函数&#xff1f;虚函数的访问指针访问引用访问对象访问成员函数中的访问构造函数和析构函数中访问纯虚函数抽象类虚析构函数重载、隐藏、覆盖菱形继承虚拟…

spring boot文档阅读笔记——01

目录标题一、文档地址二、第一个spring boot例子三、 Starters&#xff08;spring boot 官方提供的启动器&#xff09;四、SpringBootApplication注释&#xff08;一&#xff09;EnableAutoConfiguration&#xff08;二&#xff09;ComponentScan五、devtools&#xff08;热插拔…

当项目经理看世界杯决赛时…

12月18日&#xff0c;2022卡塔尔世界杯决赛&#xff0c;阿根廷在点球大战中击败卫冕冠军的法国队&#xff0c;捧走大力神杯。这场跌宕起伏的“巅峰对决”&#xff0c;给大家呈现了一场精彩绝伦的比赛。 当阿根廷2-0领先七十多分钟的时候&#xff0c;都以为这局稳了&#xff0c…

跨平台应用开发进阶(五十一):HTML5(富文本内容)连续数字、字母不自动换行问题分析及解决

文章目录一、前言二、问题分析三、解决方法3.1 对 input 标签设置3.2 对 input 标签内的 p 标签设置四、延伸阅读 顶部状态栏穿透问题五、拓展阅读一、前言 项目开发过程中&#xff0c;涉及在Web端维护富文本内容&#xff0c;通过APP端查看的相关的功能&#xff0c;功能描述大…

repo init详解

首先选择manifest源&#xff0c;一般直接使用清华或中科大的镜像源 repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest是清华提供的镜像源 repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest是中国科学技术大学的镜像源 repo init推荐使用-b 分…

未来汽车产业新生态高峰论坛在深圳举行

【2022年12月22日发自深圳】汽车产业正面临百年未有之大变局&#xff0c;以数字化技术为特征的智能网联汽车已经成为全球汽车产业转型升级的战略方向。汽车的属性也从一个机械化的交通工具转变成与各个生态相互连通的移动终端和数字空间。12月21日&#xff0c;由工业和信息化部…

【C++初阶】模板进阶

文章目录非类型模板参数模板特化函数模板特化类模板特化全特化偏特化模板的分离编译模板总结所有测试的代码非类型模板参数 模板参数分类类型形参与非类型形参 1.类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 2.非类型形…

创建城市人口总量趋势图

创建城市人口总量趋势图学习目标使用数据人口总量趋势方程数据导入对数据进行处理fct_reorder2的应用对数据进行整理对图像进行可视化操作使用fct_reorder2去掉趋势点内容小结学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关…

数据集说明:COCO的两个数据集COCO-stuff和COCO-Caption

数据集图片数量比较 COCO-Caption有33万张图、50万个caption COCO-Stuff有16.4万张图 172个类别(80thing、91stuff、1个未标注类) COCO-stuff的具体类别说明 COCO-Stuff contains 172 classes:80 thing, 91 stuff, and 1 class unlabeled. The 80 thing classes are the same …