在JavaScript中包含使用php文件而不是.js文件的問題是什麼?使用PHP作爲Javascript文件 - 安全性?
<script type='text/javascript' src='myjavascript.php'></script>
顯然我會通過並插入註冊globals問題等等,但是有沒有其他的漏洞可能發生呢?考慮一下,有超過10萬人會用這個腳本查看頁面。
在JavaScript中包含使用php文件而不是.js文件的問題是什麼?使用PHP作爲Javascript文件 - 安全性?
<script type='text/javascript' src='myjavascript.php'></script>
顯然我會通過並插入註冊globals問題等等,但是有沒有其他的漏洞可能發生呢?考慮一下,有超過10萬人會用這個腳本查看頁面。
是否還有其他漏洞可能由此發生?
在PHP本身中,將值輸出到JavaScript需要與輸出到HTML不同的編碼方案。如果你沒有得到它的權利,你面對同一類的跨站點腳本問題,如果你未能在你的HTML生成PHP使用htmlspecialchars()
:
var name= '<?= $name ?>';
<?php
echo "var name='$name';"
?>
這兩種會給你,如果問題你的名字包含撇號或反斜槓。這是addslashes()
實際上只有一次正確的幾個地方之一!
另外,您應該知道,JavaScript文件可以包含在另一個域中的<腳本>標記,該標記在JavaScript相同來源策略下通常會被拒絕訪問您的頁面。這可能讓你跨站信息泄露的攻擊,如果你的腳本包含敏感的用戶特定的數據:
<script src="http://www.targetsite.com/script.php" type="text/javascript"></script>
<script type="text/javascript">
alert('Ha ha, I know you are logged in to targetsite.com as user '+name);
</script>
最後,你將不得不應付cacheing。如果您的數據是高度動態的,您需要在腳本響應中設置no-cache標頭,以便瀏覽器不會對其進行緩存。另一方面,對於不希望處理過期的變化較少的數據,etags和if-modified-since/not-modified頭,以便瀏覽器可以更高效地緩存;如果可以提供幫助,您不希望讓100,000人全部一次又一次地獲取腳本,從而導致服務器負載過重。
處理緩存權限可能會非常痛苦,如果出現錯誤,結果會很奇怪。
綜合起來,這就是爲什麼PHP模板化爲JavaScript通常不受歡迎的原因。對於腳本的大部分是靜態的,以及需要添加的數據量較小的典型用法,通常最好將這些數據模板化到HTML中,無論是在關聯元素的屬性中,還是將其隱藏到註釋中可以從DOM中讀取,或者通過包含內聯<腳本>。
不,服務器會解析它,就像任何其他PHP文件一樣。
該文件將通過HTTP請求檢索完全相同的任何其他網頁。 如果將它包含在<script>
中,它將通過GET請求進行檢索,但這並不妨礙好奇的用戶發佈到它。您需要在任何其他PHP腳本中使用相同的預防措施 - 不多也不少。
就瀏覽器而言,它只是javascript--它不知道它是由PHP生成的,所以在這裏沒有額外的考慮。
只要你不想讓JavaScript注入文件的方式,你會沒事的。只要確保不要相信輸入和逃逸輸出。
我已經在一個項目中做到了這一點,它可以根據用戶自定義JS。 – 2009-09-14 09:23:45
服務器?瀏覽器 – Natrium 2009-09-14 09:27:02
我知道它被解析(我目前正在使用它),但我只是想知道除了基本註冊全局變量/注入之外是否還有其他東西需要插入? – Joel 2009-09-14 09:29:02