簡體   English   中英

防止JavaScript注入

[英]Preventing JavaScript Injection

說我有一個表單,用戶可以使用該表單輸入一些信息,並使用php和我已經說過的PHP代碼提交到服務器

$data = $_POST['data'];
// or
$data = strip_tags(@$_POST['data']);
  1. 我想知道strip_tags()足以阻止通過html表單進行javascript注入。 如果沒有,那么如何防止這種情況發生。 我在這里讀過。

  2. 並且還說我在瀏覽器地址欄中輸入javascript:void(document.bgColor="blue") ,這會將整個網站的背景顏色更改為藍色。 如何防止通過地址欄進行JavaScript注入。

謝謝。

我建議您在想將某些內容輸出到瀏覽器時使用htmlspecialchars

echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8');

簽出這個

對於問題2 ,我不確定是否可以防止。 這不是我以前考慮過的東西。 聽起來您正在嘗試阻止執行頁面上未包含的任何javascript,這也意味着阻止瀏覽器中的devtools在控制台中執行任何操作。 這可能會對您的用戶產生敵意,例如,如果他們想使用Instapaper提供的書簽。

對於1 ,最終目標是避免在生成新頁面時從表單中包含此注入的javascript。 從表單輸出數據時,可以將其包裝在htmlspecialchars中

這取決於您要獲得的輸出。

在某些情況下,您需要保留包括script標簽在內的HTML標簽, 希望這些元素在輸出時不會運行,在這種情況下,您應該使用htmlspecialchars($_POST['data']) ,(建議也將utf8定義為第三個參數)。

但是,如果您想徹底刪除標簽,而不是strip_tags將會阻止XSS

一種功能不能完全保護您免受腳本注入的影響。 考慮以下程序:

<?php
if(isset($_POST['height'])) 
  $height=htmlspecialchars($_POST['height'], ENT_QUOTES, 'UTF-8');
else $height=200;
if(isset($_POST['width'])) 
  $height=htmlspecialchars($_POST['width'], ENT_QUOTES, 'UTF-8');
else $width=300;
echo("
<!DOCTYPE html>
<html>
<body>
<iframe src='whatever' height=$height width=$width>
</iframe>
</body>
</html>
");

輸入已經過清理,但是javascript仍然可以通過簡單的注入向量執行,例如:

300 onload=alert(String.fromCharCode(88)+String.fromCharCode(83)+String.fromCharCode(83))

您仍然需要引用屬性,否則您很容易受到攻擊,例如本例。

當用戶輸入在javascript注釋中回顯時,存在另一個半公共的注入向量,您可以注入新行或關閉注釋。 我將其歸咎於“這種方式無法正常工作,但讓我們以評論的方式進行開發”。

注意:許多瀏覽器的XSS保護不會運行我的簡單示例。 如果您想嘗試使用它,則可以使用沒有保護措施的一種,或者找到一種可以擊敗它的載體(不確定是否有適用於Chrome的載體)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM