首页 黑客接单正文

jfinalxss攻击(jfinal漏洞)

大家畅所欲言,当jFinal遇到XSS和SQL注入怎么处理

数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原

在显示的时候对非法字符进行转义

如果项目还处在起步阶段,建议使用第二种,直接使用jstl的c:out标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个 *** ,在解析从服务器端获取的数据时执行以下escapeHTML()即可。

附:Javascript *** :

String.prototype.escapeHTML = function () {

return this.replace(//g, ‘’).replace(//g, ‘’).replace(//g, ‘’).replace(/”/g, ‘"’);

}

如果项目已经开发完成了,又不想大批量改动页面的话,可以采用之一种 *** ,此时需要借助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils

public class StringEscapeEditor extends PropertyEditorSupport {

private boolean escapeHTML;

private boolean escapeJavaScript;

private boolean escapeSQL;

public StringEscapeEditor() { super(); }

public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {

super();

this.escapeHTML = escapeHTML;

this.escapeJavaScript = escapeJavaScript;

this.escapeSQL = escapeSQL;

}

@Override

public void setAsText(String text) {

if (text == null) {

setValue(null);

如何防止跨站点脚本攻击

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

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-code404/error-code

location/errPage404/location

/error-page

!-- Maps any thrown ServletExceptions

to the error page /errPageServ --

error-page

exception-typejavax.servlet.ServletException/exception-type

location/errPageServ/location

/error-page

!-- Maps any other thrown exceptions

to a generic error page /errPageGeneric --

error-page

exception-typejava.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:

会产生如下的结果

HTML

TitleWelcome!/Title

Hi Joe Hacker

BR

Welcome to our system

...

/HTML

但是如果请求被篡改

GET /welcome.cgi?name=scriptalert(document.cookie)/script HTTP/1.0

Host:

就会得到如下的响应

HTML

TitleWelcome!/Title

Hi scriptalert(document.cookie)/script

BR

Welcome to our system

...

/HTML

这样在客户端会有一段非法的脚本执行,这不具有破坏作用,但是如下的脚本就很危险了。

;scriptwindow.open(“”%2Bdocument.cookie)/script

响应如下:

HTML

TitleWelcome!/Title

Hi

scriptwindow.open(“”+document.cookie)/script

BR

Welcome to our system

...

/HTML

浏览器回执行该脚本并将客户的cookie发到一个攻击者的网站,这样攻击者就得到了客户的cookie。

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

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

groupIdorg.owasp.antisamy/groupId

artifactIdantisamy/artifactId

version1.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端进行了拦截,并且进行了过滤。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。