簡體   English   中英

如何防止屬性中的 XSS

[英]How to prevent XSS in attributes

所以我有一個網站,用戶可以使用他們選擇的用戶名進行注冊,並且可以提交大量文本並添加評論。 目前,為了避免 XSS,我在輸入到數據庫的數據上使用 strip_tags,並且我只在正文中使用 output 數據,而不是在屬性中。 我目前正在對該站點進行更改,其中之一是創建一個用戶頁面,當有人單擊用戶名(鏈接)時加載該頁面。 這看起來像:

<a href="example.com/user/<?php echo $username; ?>">...</a>

我擔心對於 $username 變量,有人可能會插入

<a href="example.com/user/user" onClick="javascript:alert('XSS');">...</a>

我已經閱讀了很多關於此的其他 SO 帖子,但沒有一個給出黑白答案。 如果我在 output 上的所有文本上使用以下內容,除了輸入上的 strip_tags:

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

這是否足以阻止所有 XSS 攻擊,包括那些使用內聯javascript:語法的攻擊?

另外,有什么方法可以刪除實際的 html 標簽而不刪除“我>你”之類的東西?

謝謝!

根據 PHP5 認證學習指南,關於安全性有兩條黃金法則:

  1. 過濾器輸入
  2. 逃生 output

目前,您只關注問題的一方面。

但我更喜歡htmlentities。

Escaping 取決於上下文。 如果是 URL,請使用 URL 編碼 (%xx),但還要檢查完整的 URL 是否以“javascript:”開頭。 您的 onclick-attribute 語法不是必需的。 Onclick 是一個 javascript 事件處理程序,因此其中的任何 javascript 都將運行。

請參閱 OWASP XSS 預防備忘單,了解如何針對不同的上下文進行轉義。

暫無
暫無

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

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