所以我最近一直在编写一个脚本来混淆客户端代码以保护知识产权,而不会干扰结果页面的交互性。过程如下:
一个。请求的对象是.js或.css文件。将文件传递给YUI Compressor并发送输出
湾请求的对象是图像或应用程序。传递文件没有变化
℃。请求的对象包含HTML。将每个ASCII字符替换为其2位十六进制等效值并发送以下javascript:
<script type="text/javascript">
var x="~lots of hex~";
var y="";
for(i=0; i<x.length; i+=2){
y += unescape('%'+x.substr(i,2));
}
document.write(y);
</script>
因此,网站被大量的十六进制和一个小的javascript取代,以将十六进制返回到其原始形式。我在examples.chikachu.com/colorbox/example1上有一个这样的设置示例(我没有编写ColorBox代码,它是我选择使用的免费jQuery工具,因为它允许我测试几个不同的javascript功能并确保它们全部工作)
现在出现问题:
事实证明,99%的时间都有效。但AJAX让它生气。单击其中一个AJAX示例(在“其他内容类型”下)看起来会将您重定向到新页面。但是,查看地址栏或查看页面源将证明您仍然在同一页面上。使用Chrome中的Inspect Element工具(或Firefox中的Firebug)将显示网页内容完全被AJAX请求的内容替换。
如果我稍微修改parse_request.php以允许AJAX请求的文件无损地传递,一切正常。没问题。因此,出于某种原因,我的脚本将其十六进制字符串替换为其有意义的HTML副本,它将覆盖整个网站,而不是很好地将其自身插入到&lt; div&gt;的范围内。对象
基本上这是预期的非混淆HTML:
<html>
<head>
...
</head>
<body>
<div id="colorbox">
<INSERT AJAX HERE>
</div>
...
</body>
</html>
只有AJAX被混淆,我希望如下:
<html>
<head>
...
</head>
<body>
<div id="colorbox">
<script type="text/javascript">
var x="asdfasdfasdfasdf";
var y="";
for(i=0; i<x.length; i+=2){
y += unescape('%'+x.substr(i,2));
}
document.write(y);
</script>
</div>
...
</body>
</html>
我希望这里的document.write()行会在javascript的位置写入y(在&lt; div&gt;内)。如果我错了,那不是document.write()的工作方式,我仍然期望它在文档的末尾写y。相反,整个文档被替换为y。为什么会这样,我的解决方案是什么?
答案 0 :(得分:1)
回答你的上一个问题: 致电
文件撰写( 'my_precious_html_code');
将根据调用时(onLoad事件之前或之后)附加或覆盖页面上的文本。您不应该使用任何脚本。在此处阅读更多相关信息:http://javascript.crockford.com/script.html
一般答案: 混淆HTML代码没有任何意义。就像在90年代末通过禁用鼠标右键来保护图像一样。我花了不到3秒的时间来“破解”你的混淆代码并获得格式精美的HTML。此外,您的网站也会以怪癖模式呈现,这可能是您不想要的。
答案 1 :(得分:0)
尝试这样的事情:
<html>
<head>
...
</head>
<body>
<div id="colorbox">
<div id="MYAJAXCONTENT">
</div>
<INSERT AJAX HERE>
</div>
...
</body>
</html>
<html>
<head>
...
</head>
<body>
<div id="colorbox">
<script type="text/javascript">
var x="asdfasdfasdfasdf";
var y="";
for(i=0; i<x.length; i+=2){
y += unescape('%'+x.substr(i,2));
}
document.getElementById('MYAJAXCONTENT').innerHTML = y;
// for the jQuery psychos out there
// $('#MYAJAXCONTENT').html(y);
</script>
</div>
...
</body>
</html>