2011-08-27 99 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方法,並對數組中的數據進行編碼和解碼。這將增加更多的安全性。