这里,一般都需要预先将正常的字符串编码成 JavaScript unescape() 函数能够解译的格式,以 PHP 为例,可以使用以下函数实现 Javascript 中 escape() 函数相同的功能: <div class="codetitle"><a style="CURSOR: pointer" data="52091" class="copybut" id="copybut52091" onclick="doCopy('code52091')"> 代码如下:<div class="codebody" id="code52091"> <?php function escapeToHex($string,$encoding = UTF-8) { $return = ; for ($x = 0; $x < mb_strlen($string,$encoding); $x ++) { $str = mb_substr($string,$x,1,$encoding); if (strlen($str) > 1) { // 多字节字符 $return .= %u . strtoupper(bin2hex(mb_convert_encoding($str,UCS-2,$encoding))); } else { $return .= % . strtoupper(bin2hex($str)); } } return $return; } ?> 假设我们要隐藏以下地址:http://www.dirk.sh/assets/uploaded/thisistest.pdf 我们可以利用以下脚本实现: <div class="codetitle"><a style="CURSOR: pointer" data="43805" class="copybut" id="copybut43805" onclick="doCopy('code43805')"> 代码如下:<div class="codebody" id="code43805"> <?php // 请自行包含 escapeToHex() 函数定义 $test = document.write(&;a href="http://www.dirk.sh/assets/uploaded/thisistest.pdf">test); echo <script Language="Javascript">eval_r(unescape(" . escapeToHex($test) . ")); ?> 如果你查看页面源代码,你会看到(因为太长,所以进行了手动分行,实际运行结果应该是完整的一行): <div class="codetitle"><a style="CURSOR: pointer" data="21779" class="copybut" id="copybut21779" onclick="doCopy('code21779')"> 代码如下:<div class="codebody" id="code21779"> <script Language="Javascript">eval_r(unescape("%64%6F%63%75%6D%65%6E%74%2E%77 %72%69%74%65%28%27%3C%61%20%68%72%65%66%3D%22%68%74%74%70%3A%2F%2F%77%77%77 %2E%64%69%72%6B%79%65%2E%6E%65%74%2F%75%70%6C%6F%61%64%65%64%2F%74%68%69%73 %69%73%74%65%73%74%2E%70%64%66%22%3E%74%65%73%74%3C%2F%61%3E%27%29")) 而在浏览器中显示的页面,和普通 html 没有分别。 注: 1、escapeToHex() 函数的第二个参数($encoding)表示你传递进来的字符串的编码,默认是 UTF-8,如果你使用了其他编码,应该在调用函数的明确指定; 2、unescape() 在 ECMAScript v3 规范中被反对使用,该规范建议使用新的替代函数 decodeURIComponent(),但我经过测试发现,decodeURIComponent()函数对多字节字符(中文)处理存在问题,所以仍然使用了 unescape() 函数。 3、原则上来说,上述方法只是为了防止搜索爬虫获取你认为需要保密的资源地址,在支持 Javascript 的浏览器下浏览页面,和没有启用这种保护机制情况下看到的呈现是完全相同的。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|