如何使用 HTML、JavaScript 和 DOM 防止跨站點腳本

如何使用 HTML、JavaScript 和 DOM 防止跨站點腳本

跨站點腳本,廣為人知的 XSS,是網絡犯罪分子使用的最危險的攻擊方法之一,因此每個開發人員和安全研究人員了解它是什麼以及如何防止攻擊至關重要。那麼,如何應對 XSS 漏洞呢?您使用 HTML、JavaScript 或 DOM 來顯示網站從用戶那裡接收到的數據。這三個不同領域中的一個或多個可以協同工作。

如何使用 HTML 防止 XSS

XSS 允許攻擊者將惡意代碼或腳本注入網頁,以訪問該站點的毫無戒心的用戶為目標。這可能會竊取個人數據,將訪問者重定向到網絡犯罪分子設置的另一個站點,或者以其他方式篡改網頁的外觀。但是你可以防止這種情況發生;例如,通過阻止他們插入 HTML。

假設您有一個帶有留言簿的網站。假設使用此留言簿的訪問者可以在此處寫下他們的姓名和留言,並且可以公開查看他們的留言。想要在您的留言簿中進行 XSS 測試的攻擊者將使用您分配的區域來寫入消息。該網絡罪犯將在此處運行 JavaScript 代碼。例如,攻擊者可以使用如下 JavaScript 代碼:

<script>alert("The XSS!")</script>

攻擊者必須使用腳本標籤才能成功。否則,JavaScript 代碼將無法運行。您必須對 < 語句進行編碼,以便用戶永遠無法使用 HTML 標記。這將使攻擊者難以使用 HTML 標記。

如何使用 JavaScript 防止 XSS

使javascript代碼具有xss抗性

HTML 中的邏輯在 JavaScript 中也有效。在某些應用程序中,可以使用 JavaScript 代碼打印網站從用戶那裡接收到的數據。

考慮這個編碼:

<p id="print"></p>
<script>
document.getElementById("test").innerHTML = "";
</script>

想像一個網站使用像上面那樣的代碼塊。開發人員在這裡使用了一個名為“print”的“p”標籤。從代碼中可以看出,“search”參數會傳來一個值,開發者想在“p”標籤中顯示這個傳入的值。進行此操作的開發人員想使用 JavaScript 的 innerHTML 特性。

現在讓我們從網絡攻擊者的角度來看一下情況。在這種情況下,攻擊者將在“script”標籤內執行 XSS 測試。為此,攻擊者不需要重新啟動標籤,因為已經使用了一個“腳本”標籤。然後攻擊者可以編寫如下測試:

filename.php?search=a" alert("The XSS!"); f= "

此代碼將在網站上顯示為:

document.getElementById("test").innerHTML = " a" alert("The XSS!"); f=" ";

那次攻擊就會成功。為了更好地理解這個問題,讓我們再檢查一個攻擊者可以使用的示例技術。黑客可能已經應用了 XSS 測試,例如:

filename.php?search=";</script><em>Fatih</em>

這是從網站上查看時的樣子:

document.getElementById("test").innerHTML = " ";</script><em>Fatih</em> ";

這可能看起來有點奇怪,因為攻擊者在這裡使用“/script”這樣的結構關閉了第一個“script”標籤。因此,攻擊者可以重新啟動他們想要的任何 JavaScript 和 HTML 代碼。

如果您考慮這兩個不同的示例,保護免受 XSS 攻擊似乎非常簡單。必要的預防措施是對您在第一個示例中看到的”字符進行編碼。在第二個示例中,對字符<>進行編碼。

如何使用 DOM 防止 XSS

在這種 XSS 變體中,網站從用戶那裡接收到的數據可能會干擾 DOM 元素的屬性。例如,站點從用戶那裡接收到的顏色信息會影響表格的背景顏色或頁面的整個背景。因此,用戶無意中乾擾了正文和表格的樣式佈局。下面的代碼就是一個很好的例子:

<body bgcolor="<?php echo $_GET['color'];? >"/>

這樣,網站就可以直接在“body”元素的“bgcolor”屬性中使用從用戶那裡收到的“color”參數。那麼此時攻擊者可以做什麼呢?他們可以執行此惡意代碼:

filename.php?color=red" onload="alert('The XSS!')

從網站上看是這樣的:

<body bgcolor=" red" onload="alert('The XSS!') "/>

為防止這種情況發生,開發人員必須對字符”進行編碼。

但是,JavaScript 中還有一個更重要的元素需要注意。以下代碼片段是一個示例:

<a href="javascript:alert('The XSS!')">

這意味著可以直接運行一些 JavaScript 代碼。最好的預防措施之一是確保網站檢查它從用戶那裡收到的數據是否是真實的 URL。最簡單的方法是確保連接中有“HTTP”和“HTTPS”(HTTP 的安全版本)等表達方式。

使用 PHP 防止 XSS 的示例函數

使用 PHP 代碼保護您的站點免受 XSS 攻擊

您已經看到了一些有關如何保護應用程序或網站免受 XSS 攻擊的示例。您可以在 PHP 中使用此表中的代碼片段:

請注意,這些只是示例,會因您使用的軟件語言而異。

您可以使用 PHP 創建一個 Web 應用程序,並嘗試使用您在上面看到的代碼將它們發送出去。如果您想知道如何使用所有這些方法,您可以從下面的 PHP 代碼塊中獲得一些想法,即使您使用的是不同的語言,這些代碼塊也應該很有用:

<?php
$data = $_GET['data'];

function in_attribute($str){
return htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT will encode the double quote (") character.
}

function in_html($str){
$link = '/^(((https?)|(\/\/))).*/';
if(!preg_match($link, $str))
{
return "/";
}
return $str;
}

$data = in_attribute($data);
$data = in_html($data);
$data = real_url(data);
?>

保護您的網站免受 XSS 等攻擊

XSS 是黑客使用的一種流行的攻擊媒介。通常,URL 中的路徑值、您網站上可以輸入數據的任何字段(例如表單和評論字段)都可用於測試 XSS 漏洞。但當然,網絡罪犯可以使用許多不同的方法來攻擊網站,尤其是當您的網站有很多用戶並隱藏他們的信息時。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *