2011-10-10 42 views

回答

4

那麼,要回答你的問題,這取決於。如果你正在做:

<p><?php echo htmlspecialchars($userInput); ?></p> 

然後,他們將無法將腳本注入到您的應用程序。

無論其

如果你想做到這一點:

<script> 
    var foo = '<?php echo htmlspecialchars($userInput); ?>'; 
</script> 

您是安全。請參閱OWASP's XSS Cheat Sheet上的規則3。

爲了保護這一點,您需要使用JS感知轉義函數。如果你只是需要一個字符串文字,你可以用json編碼它,但我會用PHP的ESAPI來處理這個問題。

0

當然可以。 <script>改變爲&lt;script&gt;

+0

這不是JavaScript。這是HTML。 – BoltClock

+0

@BoltClock:但腳本內部也是「逃脫」(不執行) – genesis

2

按照manual以下字符被替換:

  • '&'(符號)變成'&amp;'
  • '"'(雙引號)變得'&quot;'當沒有設置ENT_NOQUOTES
  • "'"(單引號)變得'&#039;'僅當ENT_QUOTES被設置。
  • '<'(小於)變得'&lt;'
  • '>'(大於)變得'&gt;'

因此,一個<script>標籤將被修改,但使用Javascript內部可以或可以不被修改,這取決於它包含哪些字符。

2

PHP manual告訴你到底是什麼角色得到由功能而改變。

它不關心,如果你給它的字符串包含HTML或JS或別的東西。它只是在你給它的任何字符串上進行翻譯。

由於HTML和JS使用不同的轉義字符,它使任意的數據「安全」爲HTML中使用,其中包括使一些JS在HTML使用安全。

例如

$js = "if (foo && bar) { return false; }" 
echo "<button onclick='" . htmlspecialchars($js) . "'>click</button>" 

將輸出:

<button onclick='if (foo &amp;&amp; bar) { return false; }'>click</button> 

從而防止了特殊的含義&具有從破壞腳本的HTML。

它不會讓一個字符串安全地在JavaScript中使用,雖然,因爲它不觸及字符,如\具有特殊的意義存在。