??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
ArchiveDetector detector = new DefaultArchiveDetector(ArchiveDetector.ALL,
new Object[] { "zip", new CheckedZip32Driver("GBK") } );
File zipFile = new File("zipFile", detector);
File dst = new File("dst");
// 解压~?/span>
zipFile.copyAllTo(dst);
代码十分z,注意q个File?/p>
de.schlichtherle.io.File
不是
java.io.File
当处理完业务要删除这个Zip FileӞ问题出现了:
q个文g删不掉!Q!
把自q代码查了好久Q确认没问题后,开始从TrueZIP下手Q发现它有特D的地方的,是提C的:
File file = new File(“archive.zip”); // de.schlichtherle.io.File!
Please do not do this instead:
de.schlichtherle.io.File file = new de.schlichtherle.io.File(“archive.zip”);
This is for the following reasons:
1.Accidentally using java.io.File and de.schlichtherle.io.File instances referring to the same path concurrently will result in erroneous behaviour and may even cause loss of data! Please refer to the section “Third Party Access” in the package Javadoc of de.schlichtherle.io for for full details and workarounds.
2.A de.schlichtherle.io.File subclasses java.io.File and thanks to polymorphism can be used everywhere a java.io.File could be used.
原来两个File不能交叉使用Q搞清楚原因了,加这么一句代码搞定?/p>
zipFile.deleteAll();
final private int capacity;
final private Map<K,Reference<V>> map;
final private ReentrantLock lock = new ReentrantLock();
final private ReferenceQueue<Reference<V>> queue = new ReferenceQueue<Reference<V>>();
public LRUCache(int capacity) {
this.capacity = capacity;
map = new LinkedHashMap<K,Reference<V>>(capacity,1f,true){
@Override
protected boolean removeEldestEntry(Map.Entry<K,Reference<V>> eldest) {
return this.size() > LRUCache.this.capacity;
}
};
}
public V put(K key,V value) {
lock.lock();
try {
map.put(key, new SoftReference(value,queue));
return value;
}finally {
lock.unlock();
}
}
public V get(K key) {
lock.lock();
try {
queue.poll();
return map.get(key).get();
}finally {
lock.unlock();
}
}
public void remove(K key) {
lock.lock();
try {
map.remove(key);
}finally {
lock.unlock();
}
}
}
1.AJAX中的跨站点脚?/font>
前几个月Qh们发C多种跨站点的脚本d。在此类d中,受害者的包含信息的浏览器上会q行来自特定|站的恶意JAVA脚本代码? Yamanner蠕虫是一个最q的范例Q它利用Yahoo邮g的AJAX调用中的跨站点脚本机会来d受害者。另一个近期的范例是Samy蠕虫Q它? 用MySpace.com的跨站点脚本漏洞来攻凅RAJAX在客L上运行,它允讔R误书写的脚本被攻击者利用。攻击者能够编写恶意链接来哄骗那些没有? 备的用户Q让他们用浏览器去访问特定的|页。传l应用中也存在这LqQ但AJAXl它d了更多可能的漏洞?font color="#ff0000">例子Q?Yamanner蠕虫利用了Yahoo Mail的AJAX的跨站脚本漏z,Samy蠕虫利用了MySpace.com的跨站脚本漏z?/font>
2.XML中毒
很多Web2.0应用中,XML传输在服务器和浏览器之间往复。网l应用接收来自AJAX客户端的XML块。这XML块很可能染毒。多ơ将递归 负蝲应用C出相似的XML节点,q样的技术还q不普遍。如果机器的处理能力较弱Q这导致服务器拒绝服务。很多攻击者还制作l构错误的XML文档Q这? 文档会扰乱服务器上所使用的依赖剖析机制的逻辑。服务器端的剖析机制有两U类型,它们是SAX和DOM。网l服务也使用相同的攻d量,q是因ؓ|络服务 接收SOAP消息Q而SOAP是XML消息。在应用层大范围C用XMLs使攻击者有更多的机会利用这个新的攻d量?/font>
XML外部实体参照是能被攻击者伪造的一个XML的属性。这会d者能够利用h意的文g或者TCPq接的缺陗XML schema中毒是另一个XML中毒的攻d量,它能够改变执行的程。这个漏z能帮助d者获得机密信息?font color="#ff0000">d者可以通过复制节点q行DOSdQ或者生成不合法的XMLD服务器端逻辑的中断。攻击者也可以操纵外部实体Q导致打开M文g或TCPq接端口。XML数据定义的中毒也可以Dq行程的改变,助攻击者获取机密信息?/font>
3.恶意AJAX代码的执?/font>
AJAX调用非常不易察觉Q终端用h法确定浏览器是否正在用XMLHTTPh对象发出无记载的调用。浏览器发出AJAX调用lQ意网站的? 候,该网站会Ҏ个请求回应以cookies。这导致出现泄漏的潜在可能性。例如,U翰已经登陆了他的银行,q且通过了服务器认证。完成认证过E后Q他 会得C个会? cookie。银行的面中包含了很多关键信息。现在,他去览器他|页Qƈ同时仍然保持银行账户的登陆状态。他可能会刚好访问一个攻击者的|页Q在q个 |页上攻击者写了不易被察觉的AJAX 代码Q这个代码不用经q约的同意Q就能够发出后台调用l约的银行|页Q因而能够从银行面取得关键信息q且把这些信息发送到d者的|站。这导致机 密信息的泄漏甚至引发安全H破?font color="#ff0000">AJAX ~码可以在不为用h知的情Ş下运行,假如用户先登录一个机密网站,机密|站q回一个会话cookieQ然后用户在没有退出机密网站的情Ş下,讉Kd? 的网站,d者网上的AJAX~码可以(通过q个会话cookie?)去访问机密网站上的网,从而窃取用L机密信息?注:q里的解释有点含p,? ZԌ览器不会把一个网站的会话cookie传给另外一个网站的Q即文中的这?#8220;When the browser makes an AJAX call to any Web site it replays cookies for each request. ”Q不完全?
4.RSS/Atom 注入
q是一Ҏ的web2.0d。RSS反馈是h们在门户|站或者网l应用中׃n信息的常用手Dc网l应用接受这些反馈然后发送给客户端的览器。h们可 以在该RSS反馈中插入文本的JavaScript来生对用户览器的d。访问特定网站的l端用户加蝲了带有该RSS反馈的网,q个脚本 ׃q行h——它能够往用户的电脑中安装软g或者窃取cookies信息。这是一个致命的客户端攻凅R更p糕的是Q它可以变异。随着RSS和ATOM 反馈成ؓ|络应用中整合的lgQ在服务器端数据发布给l端用户之前Q过滤特定字W是非常必要的?font color="#ff0000">d者可以在RSS feeds里注入Javascript脚本Q如果服务器端没有过滤掉q些脚本的话Q在览器端会造成问题?/font>
5.WSDL扫描和enumeration
WSDL(|络服务界定语言)是网l服务的一个接口。该文g提供了技术,开放方法,创新形式{等的关键信息。这是非常敏感信息,而且能够帮助? 们决定利用什么弱Ҏd。如果将不必要的功能或者方法一直开着Q这会ؓ|络服务造成潜在的灾难。保护WSDL文g或者限定对其的讉K是非帔R要的。在? 际情况中Q很有可能找C些用WSDL扫描的一些漏z?font color="#ff0000">WSDL提供了Web服务所用的技术,以及外露的方法,调用的模式等信息。假如Web服务对不必要的方法没有禁止的话,d者可以通过WSDL扫描扑ֈ潜在的攻ȝ?/font>
6.AJAX常规E序中客L的确?/strong>
Zweb2.0的应用用AJAX常规E序来在客户端上q行很多操作Q比如客L数据cd的确认,内容查,数据域等{。正常情况下Q服务端 也应该备份这些客L查信息。大部分开发者都没有q么?他们q样做的理由是,他们假设q样的确认是由AJAX常规E序来负责的。避开ZAJAX的确 认和直接发送POST或者GEThl那些应用——这些应用是诸如SQL注入,LDAP注入{类随确认进入的d主要来源Q它们能够攻ȝl应用的关键? 源——都是可以做到的。这都增加了能够为攻击者所利用的潜在攻d量的数量?font color="#ff0000">假如开发h员只依赖客户端验证,不在服务器端重新验证的话Q会DSQL注入QLDAP注入{等?/font>
7.|络服务路由问题
|络服务安全协议包括WS-Routing服务。WS-Routing允许SOAP消息在互联网上各U各样不同的节点中的特别序列中传输。通常 加密的信息在q些节点来回传送。交互的节点中的L一个被d都将致d者能够访问到在两个端点之间传输的SOAP消息。这造成SOAP消息的严重的 安全泄漏。随着|络应用开始被|络服务框架所采用Q攻击者们开始{而利用这些新协议和新的攻d量?font color="#ff0000">Web服务安全协议使用WS-Routing服务Q假如Q何中转站被攻占,SOAP消息可以被截莗?/font>
8.SOAP消息的参数操?/font>
|络服务接收信息和来自SOAP消息的变量。修改这些变量是很可能的。例如,“10”是SOAP消息中多个节点中的一个。攻击者可以修改点Qƈ 且尝试不同种的注入攻几Z—比如,SQL,LDAP,XPATH,命o行解释器——ƈ且探索能被他用来掌握及其内部信息的攻d量。网l服务代码中错误? 或者不够完备的输入认使网l服务应用易于发生泄?q是一个目标指向网l服务所带的|络应用的一Ҏ的攻d量?font color="#ff0000">cM于SQL注入Q假如对SOAP消息里节点的数据不做验证的话?/font>
9.SOAP消息中的XPATH注入
XPATH是一U用来查询XML文档的语aQ它跟SQL语句很类?我们提供某些信息(参数)然后从数据库中得到查询结果。很多语a都支? XPATH 解析的功能。网l应用接收大型XML文档Q很多时候这些应用从l端用户和XPATH语句中取得输入量。这些代码的D落对XPATH注入没有什么防御能力? 如果XPATH执行成功Q攻击者能够绕q认证机制或者造成机密信息的一些损失。现在h们只知道很少部分的能够被d者利用的XPATH的漏z。阻止这个攻 d量的唯一Ҏ是在给XPATH语句传递变量值的时候提供适当的输入确认?font color="#ff0000">cM于SQL注入Q假如对数据不做验证而直接做XPATH查询的话?/font>
10. RIA瘦客L二进制的伪?/strong>
丰富|络应用(RIA)使用非常丰富的UI要素比如Flash,ActiveX控g或者AppletsQ它使用q些要素作ؓ|络应用的基本接 口。这个框架存在几个安全问题。其中最主要的一个就是关于会话管理。它是在览器中q行的,q且׃n相同的会话。同Ӟ׃客户端将下蝲整个二进制元件到 自己的主机,d者就可以颠倒工E的那个二进制文件ƈ且反~译代码。把q些二进制串打包q绕q一些包含在代码中的认证逻辑是有可能实现的。这? WEB2.0框架下的另一个有的d向量?font color="#ff0000">因ؓRich Internet Applications的组件是下蝲到浏览器本地的,d者可以对二进制文件进行逆向工程Q反~译~码Q通过改动文gQ蟩q认证逻辑 ?/font>
l论
AJAX,RIA以及|络服务是WEB2.0应用I间的三w要的技术向量。这些技术很有前景,它们带给桌面新的E式Q加Z|络应用的整体效 率和效用。随着q些新技术而来的是新的安全问题Q忽略这些问题将会导致整个世界发生巨大的N。本文中Q我们只讨论?0U攻凅R但是实际上q有很多其他 的攻d量。对q些新的d向量的最好的防MҎ是增加WEB2.0的安全意识,提高代码操作的安全性以及配|的安全?/font>
不过上面的程序如果不用正则表辑ּQ而直接用split函数来分解可能更单,E序如下Q?/p>
var ip="10.100.20.168"
ip=ip.split(".")
alert("IP值是Q?+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))
匚wEmail地址的正则表辑ּQ\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匚w|址URL的正则表辑ּQhttp://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
利用正则表达式限制网表单里的文本框输入内容Q?/p>
用正则表辑ּ限制只能输入中文Qonkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"
用正则表辑ּ限制只能输入全角字符Q?onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"
onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
用正则表辑ּ限制只能输入数字Qonkeyup="value=value.replace(/
[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
用正则表辑ּ限制只能输入数字和英文:onkeyup="value=value.replace(/
[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"