跨站点脚本(XSS)和预防

如OWASP网站(https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))所述,跨站点脚本(XSS)攻击的变种几乎是无限的。 在这里,我建议使用基于Servlet筛选器的解决方案来清理HTTP请求。
攻击
让我们看看XSS攻击是如何表现出来的。 附件是一个过度简化的portlet,它显示了一个场景,该场景在论坛等基于社交和协作的系统中非常常见。 参见下面的伪序列图。


测试
在这里,1.有一个可用的表单,用户可以在其中输入带有提交按钮和名为“ mytext”的文本框的评论。 用户A呈现此表单。 2.用户A在输入文本框中输入一个Java脚本并提交表单(这是邪恶输入您的应用程序的步骤)。 只是为了让您看到问题所在; 假设用户输入的脚本将应用程序存储的cookie发送到攻击者的站点。 3.用户B登录到系统,他想查看用户A提供的注释。因此,他进入相应页面,系统在其中呈现A提供的“ mytext”的值。4.浏览器呈现“ mytext”的值,即一个Java脚本,它获取为用户B存储的当前站点的所有cookie,并将其发送给Attackers系统。
预防措施(总比治愈更好),我们将看到清除HTTP参数如何有助于阻止这种攻击。 为了使这次攻击成功,当B提供A的评论时,将向浏览器发送什么样的响应? 就像是 -
<div>A's Comments</div>
<div>
<script>
<!--
This script will get all cookies and will send them to attacker's site.
-->
</script>
</div>
如您所见,这种攻击之所以可能是因为,对于浏览器而言,HTML文档是标记和可执行代码的混合体。 混合可执行代码和标记的能力是攻击者可以利用的致命组合。 使用Servlet过滤器,我们可以清除所有输入参数并删除所有可以表示浏览器可执行指令的特殊字符。 这样,没有邪恶进入系统。 这是执行此操作的非常简单的Servlet过滤器。 使用HttpServletRequest上的包装器,并且在转义后重写方法以返回请求参数值。 为了逃避,我建议使用Apache Commons项目的StringEscapeUtils,而不要进行一些自定义编码。
另一种方法是让用户输入他们想要的任何东西,但在渲染时将<,>,&,',“转换为其相应的字符实体代码。 通常,这可以通过使用JSTL来完成–
<div>A's comments</div>
<div>
<c:out value="${comments}" escapeXml="true" />
</div>
当用户可以彼此共享代码片段时,此方法特别有用。
基于用户与系统之间的交互,可以设计出许多其他巧妙的方式来发起XSS攻击。 但是拥有对系统输入的绝对控制权肯定可以再次防范此类攻击。

参考: XSS和预防我们JCG伙伴 Advait特里维迪在CoolCode博客。

翻译自: https://www.javacodegeeks.com/2012/08/cross-site-scripting-xss-and-prevention.html

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

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

相关文章

NoSQL入门第一天——NoSQL入门与基本概述

一、课程大纲 二、入门概述 1.为什么用NoSQL 单机MySQL的年代&#xff1a; 一个网站的访问量一般都不大&#xff0c;用单个数据库完全可以轻松应付。      我们来看看数据存储的瓶颈是什么&#xff1f;        1.数据量的总大小 一个机器放不下时。&#xff08;现…

随机森林特征个数mtry matlab,基于随机森林的特征选择算法

2.1 算法描述本文提出了一种基于随机森林的Wrapper特征选择方法RFFS,利用随机森林算法的变量重要性度量对特征进行排序,然后采用序列后向搜索方法,每次从特征集合中去掉一个最不重要(重要性得分最小)的特征,逐次进行迭代,并计算分类正确率,最终得到变量个数最少、分类正确率最高…

matlab循环读取变量,Matlab for 多个变量循环能不能这样啊 ,求教高手!!!!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼for a0.003:0.0005:1; b0.002:0.0005:0.9; c0.001:0.0005:0.8;d0.0005:0.0005:0.7;E1a* E_Bone;E2b* E_Bone;E3c* E_Bone;E4d* E_Bone;G1a* G_Bone;G2b* G_Bone;G3c* G_Bone;G4d* G_Bone;%% Integration for cortical bone partsIn…

UVA - 10384 The Wall Pusher(推门游戏)(IDA*)

题意&#xff1a;从起点出发&#xff0c;可向东南西北4个方向走&#xff0c;如果前面没有墙则可走&#xff1b;如果前面只有一堵墙&#xff0c;则可将墙向前推一格&#xff0c;其余情况不可推动&#xff0c;且不能推动游戏区域边界上的墙。问走出迷宫的最少步数&#xff0c;输出…

JavaOne 2012:JavaOne技术主题演讲

Mark Reinhold从JavaOne 2012技术主题演讲开始。 他说&#xff0c;今年的版本将有所不同&#xff0c;因为它将使用大致相同的示例来说明Java的各个方面&#xff0c;而不是对Java的每个组件进行单独的单独介绍。 JavaFX团队的Richard Bair和Jasper Potts &#xff08;并与FXExpe…

C语言结构体及函数传递数组參数演示样例

C语言结构体及函数传递数组參数演示样例 注&#xff1a;makeSphere()函数返回Sphere结构体&#xff0c;main函数中。调用makeSphere()函数&#xff0c;传递的第一个參数为数组&#xff0c;传递的数组作为指针。posted on 2017-07-30 18:42 mthoutai 阅读(...) 评论(...) 编辑 收…

Maven内部版本号插件–用法示例

假设我们需要向一些工件&#xff08;jar&#xff0c;war等&#xff09;添加内部版本号。 在这里&#xff0c;我想演示buildnumber-maven-plugin的用法。 这篇文章基于&#xff1a; http://mojo.codehaus.org/buildnumber-maven-plugin/usage.html http://www.site.lalitbhatt…

Python魔法方法(magic method)细解几个常用魔法方法(下)

接上文&#xff0c;再介绍最后几个常用的魔法方法。 关于__dict__: 先上个例子&#xff1a; class Test(object):fly Truedef __init__(self, age):self.age age __dict__魔法方法可以被称为系统&#xff0c;他是存储各分层属性的魔法方法。__dict__中&#xff0c;键为属性名…

AIX下RAC搭建 Oracle10G(六)dbca建库

AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G&#xff08;六&#xff09;dbca建库 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 主机名 AIX203 AIX204 交换机 SAN光纤交换机 存储 SAN T3存储 大纲流程例如以下&#xff1a; 第一部分&#xff1…

php string slice,substring()与str.slice()区别

当接收的参数是负数时&#xff0c;slice会将它字符串的长度与对应的负数相加&#xff0c;结果作为参数&#xff1b;substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数&#xff1b;substring则干脆将负参数都直接转换为0。测试代码如下&#xff1a;var test h…

JavaOne 2012:掌握Java部署

在吃完一次JavaClass 2012午餐会的意大利经典组合后&#xff0c;我前往希尔顿帝国宴会厅B观看了演示“掌握Java部署”。 来自Oracle的发言人是Mark Howe和Igor Nekrestyano Howe表示&#xff0c;部署团队的目标是帮助Java开发人员将其应用程序部署到所选平台。 他首先讨论了“功…

数组删除奇数编号的数据求最后的元素

//abcd...s 这19个字符循环106次成一个长度2014的字符串&#xff0c;然后删除第奇数个&#xff0c;得到小串&#xff0c;再删&#xff0c;最后的字符是&#xff1f; #define _CRT_SECURE_NO_DEPRECATE #include<stdio.h> #include<windows.h> #include<string.…

php 提高吞吐量,如何提高网站的吞吐量

吞吐量定义百科吞吐量是指对网络、设备、端口、虚电路或其他设施&#xff0c;单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。以上的定义比较宽泛&#xff0c;定义到网站或者接口的吞吐量是这样的&#xff1a;吞吐量是指系统在单位时间内处理请求的数量。这里有一…

ubuntu下如何查找某个文件的路径

1.whereis 文件名 特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来. 2.find / -name 文件名 特点:准确,但速度慢,消耗资源大,例如我想找到PHP.ini的准确位置,就需要用 #find / -name php.ini 3.locate 文件名 强力推荐的方…

事件的学习

1.鼠标单击事件( onclick &#xff09;: onclick是鼠标单击事件&#xff0c;当在网页上单击鼠标时&#xff0c;就会发生该事件。同时onclick事件调用的程序块就会被执行&#xff0c;通常与按钮一起使用。 <!DOCTYPE HTML> <html> <head> <meta http-equiv…

使用您自己的规则在Eclipse中自定义PMD

PMD是非常好的Java代码扫描程序&#xff0c;可帮助您避免潜在的编程问题。 它可以轻松扩展以满足您的需求&#xff0c;并且本文将为您带来与JPA的Enumerated注释用法相关的自定义PMD规则的简单示例。 在继续阅读之前&#xff0c;您应该检查我以前的文章之一-JPA-Enumerated def…

切换oracle用户impdp,Oracle 12c pdb使用expdp/impdp导入导出

12c推出了可插拔数据库&#xff0c;在一个容器cdb中以多租户的形式同时存在多个数据库pdb。在为pdb做数据泵导入导出时和传统的数据库有少许不同。1&#xff0c;需要为pdb添加tansnames2&#xff0c;导入导出时需要在userid参数内指定其tansnames的值&#xff0c;比如 useridus…

搭建mysql集群,使用Percona XtraDB Cluster搭建

Percona XtraDB Cluster提供的特性有&#xff1a;1.同步复制&#xff0c;事务要么在所有节点提交或不提交。2.多主复制&#xff0c;可以在任意节点进行写操作。3.在从服务器上并行应用事件&#xff0c;真正意义上的并行复制。4.节点自动配置。5.数据一致性&#xff0c;不再是异…

使用NoSQL实现实体服务–第4部分:Java EE

现在&#xff0c;我已经准备好了框架式的合同优先型Web服务&#xff0c;并使用Ektorp和CouchDB创建了数据访问层 &#xff0c;是时候将它们连接到一个可以正常工作的实体服务中了 。 为此&#xff0c;我将使用Java EE和Glassfish 3.1。 值得注意的是&#xff0c;对于他的那种R&…

yii2之DetailView小部件

DetailView小部件用于展示单条数据记录&#xff0c;可配置属性很少&#xff0c;使用也很简单&#xff0c;直接贴代码&#xff0c;一看就懂&#xff01; yii小部件数据小部件DetailView的使用示例&#xff1a; <? DetailView::widget([model > $user,//模型对象&#xff…