2011-08-27 97 views
0

我有一个带有URL的PHP​​数组,我想隐藏(或者至少更难以复制) 我需要将此数组转换为JS数组。 是否有可能没有在JS中写入项目?将PHP数组转换为JS数组(无需编写内容)

所以就像在下面的例子中的网址可在源代码中找到...

<?php 
    $arr = array("http://foo.com","http://bar.com","http://baz.com"); 
?> 

<script> 
    var newArr = new Array("<?php echo implode(',' ,$arr); ?>"); 
</script> 
+0

即使你对它们进行了模糊处理(这是你所能做的),它们可以用JS调试器挖掘出来。 – mario

回答

0

如果你想的网址无法读取,你可以编码每个字符\ XNN转义序列:

<?php 
    $arr = array("http://foo.com","http://bar.com","http://baz.com"); 
    $encodedArr = array(); 
    foreach($arr as $url) { 
     $encodedUrl = ''; 
     for($i = 0; $i < strlen($url); ++$i) { 
      $encodedUrl .= '\\x'.str_pad( 
        sprintf('%x', ord($url[$i])), 
        2, STR_PAD_LEFT); 
     } 
     $encodedArr[] = '"'.$encodedUrl.'"'; 
    } 
?> 
<script type="text/javascript"> 
    var newArr = [ <?php echo implode(',' ,$encodedArr); ?> ]; 
    alert(newArr[0]); 
</script> 

书面的JavaScript看起来像这样:

var newArr = [ "\x68\x74\x74\x70\x3a\x2f\x2f\x66\x6f\x6f\x2e\x63\x6f\x6d","\x68\x74\x74\x70\x3a\x2f\x2f\x62\x61\x72\x2e\x63\x6f\x6d","\x68\x74\x74\x70\x3a\x2f\x2f\x62\x61\x7a\x2e\x63\x6f\x6d" ]; 
alert(newArr[0]); 

但会提醒http://foo.com

2

都能跟得上。如果没有在JS中编写项目,这是不可能的。

0

这是不可能做到这一点,而不写入JS中的项目。但是,如果您使用这些变量进行验证,则可以在服务器上传输该验证并使用AJAX调用该验证。

-2

使用JSON。

在PHP中,这会是:

<?php 
$arr = array('http://[a]', 'http://[b]', 'http://[c]'); 

echo json_encode($arr); 
在JS

<script type="text/javascript"> 
arr[0]; // http://[a] 

arr.each(function(k,v){ 
    v; // http://[a] 

    // loops trough the remaining values 
}); 
+0

双读这个问题,我也犯了同样的错误。他不希望这些值在源代码中可见。 – HoLyVieR

+0

我明白了,所以他基本上是问“是否有可能以无人能读的方式编写内容?”说得通。无论如何,适当的术语是* obfusaction *。如果这就是他想要的,这个问题是重复的。 http://stackoverflow.com/search?q=obfuscate+text+JS – Gajus

0

我不认为这是可能的,但是这取决于你正在尝试做的,你可以完成后,从DOM中删除脚本元素,这样它就不会出现在用户的源代码中。 这种技术在构建其他人在其网站上包含的JavaScript块时非常有用。 JavaScript代码可以运行,并且完成后,从DOM中删除它自己,以便其他人无法复制您的代码。

+0

它会出现在源代码中。我想你错了你可以在调试器中看到的源代码和DOM树。 – HoLyVieR

2

Javascript可以通过AJAX请求读取数据,但它不会显示在页面源代码中,但是您可以使用任何一半体面的Web开发人员工具集来查看它。

0

如果您希望系统的某个组件不触及某些数据,请不要给它数据。

但是,如果浏览器不能拥有数据,它也不能使用它。有一个难题...

也许你想插入一个额外的间接:让你的PHP提供了一系列的'命令URL'的JavaScript GUI,并让它触发这些命令,而不是让它知道你的敏感数据。

0

直接这是不可能的。 JavaScript代码被解释,所以没有机会隐藏它。

另一种方法是使ajax调用文件,将回声的项目。

如果您希望获得更多的安全性,请使用2个GET调用来获取某些信息,然后使用js进行处理,并在第二次调用时使用它来获取您的数组。类似于“隐晦”或“时间”方法。理论上这会增加一些保护。

或者没有人suggested您可以再次使用2 GET方法,并对数组中的数据进行编码和解码。这将增加更多的安全性。