免X函数安全编写教程

2013-07-13 10:36:55 -0400
* 关于几个函数的安全使用问题 (下面我会以例子的形式来说明, 有什么错误的地方还请大家指正)*---------------------------------------例1:String urlstr = "http://wap.baidu.com:5090/jcore/t.html";URI url = new URI(urlstr);String HostStr = url.getHost(); // 一般我看大多人都用这个函数来获取 Host , 不过它并不能获得 Port(端口)String newHost = "wap.10086.com:80"; // 替换成这个 HostString newUrlStr = urlstr.replace(HostStr, newHost); // 想像一下通过这个函数重新获得 Url 是什么样的?输出结果: http://wap.10086.com:80:5090/jcore/t.html* 通过上面的结果,应该可以看出 getHost() 函数它的不安全性了,当然,如果你替换的 newHost 没有 Port(端口), 那倒是没有问题,但我觉得还是不完美,不能把端口 替换上去!!解决方法:String urlstr = "http://wap.baidu.com:5090/jcore/t.html";URL url = new URL(urlstr); // 这里我们用 URL 这个类 而不是 URI 了注意.String HostStr = url.getAuthority(); // 用 URL 类里的这个函数来获取. 用它的好处就是 如果有 端口,它就会把 Host + Port(端口) 一起获取. 如果没有 端口 则只获取 Host 部分.String newHost = "wap.10086.com:80"; // 替换成这个 HostString newUrlStr = urlstr.replace(HostStr, newHost);输出结果: http://wap.10086.com:80/jcore/t.html---------------------------------------例2:String urlstr = "http://wap.baidu.com/jcore/scr=http://wap.baidu.com/image/1.jpg";URL url = new URL(urlstr);String HostStr = url.getAuthority();String newHost = "wap.10086.com:80"; // 替换成这个 HostString newUrlStr = urlstr.replace(HostStr, newHost); // 像这种 url 存在多个 wap.baidu.com ,使用这个 replace 后会出现什么结果呢!输出结果: http://wap.10086.com:80/jcore/scr=http://wap.10086.com:80/image/1.jpg* 通过上面的结果,应该可以看出 replace 函数它的不安全性了,当然,出现相同 Host 的机率还是比较低的.但也不能说没有!!解决方法:String urlstr = "http://wap.baidu.com/jcore/scr=http://wap.baidu.com/image/1.jpg";URL url = new URL(urlstr);String xg = "://";String newHost = "wap.10086.com:80";String getUrlScheme = url.getProtocol(); // 获得 url 的开头如 http . https . ftp . fileString getHostName = url.getAuthority(); // Host + PortString getUrlPath = str.substring(getUrlScheme.length() + xg.length() + getHostName.length()); // 获得 Host 后面部分的urlString fillUrl = getUrlScheme + xg +newHost + getUrlPath; // 得到最终的替换的 url . 这样就没问题了.---------------------------------------* 下面我补一个完整版的替换 Host 函数.public static String getReHostUrl(String urlstr){try{URL url = new URL(urlstr);String xg = "://";String newHost = "wap.10086.com:80";String getUrlScheme = url.getProtocol();String getHostName = url.getAuthority();String getUrlPath = str.substring(getUrlScheme.length() + xg.length() + getHostName.length());String fillUrl = getUrlScheme + xg +newHost + getUrlPath;/* 如果直接使用的话,可以像下面这个这样使用URL localURL = new URL(fillUrl);HttpURLConnection localHttp = (HttpURLConnection)localURL.openConnection();localHttp.setRequestProperty("X-Online-Host", getHostName);return localHttp;*/return fillUrl;}catch (Exception localException){return urlstr;}}
«Newer      Older»
Comment:
Name:

Back to home

Subscribe | Register | Login | N