簡體   English   中英

PHP 的 FILTER_VALIDATE_EMAIL 是否提供足夠的安全性?

[英]Does PHP's FILTER_VALIDATE_EMAIL provide adequate security?

我有一個頁面,我想在其中接受 GET 參數中的電子郵件地址。 如果我使用FILTER_VALIDATE_EMAIL ,我是否仍然容易受到 xss 和 javascript 注入攻擊等攻擊?

我不是在問它是否是一個好的或足夠好的電子郵件地址驗證器。 我想知道是否仍然可以通過通過它的任意字符串注入錯誤的 Web 代碼——我是否需要進行額外的過濾來防止這種情況發生?

是的,一個有效的電子郵件地址可以很容易地用作一些精心制作的字符串的容器,這些字符串可用於攻擊您。

擺脫“過濾”的心態,進入“逃避”的心態。 一個通用的“使其安全”過濾器根本不存在。 它不可能存在,因為所有轉義都必須以特定於上下文的方式完成。

例如,如果將電子郵件地址輸出到純文本文檔,則無需執行任何操作。 如果它被輸出到一個 html 文檔中,作為一個文本節點,那么它需要為 html 上下文進行轉義,因此轉義 html 特殊字符和實體。 如果它被放入一個 html 文檔,並且它的值將在一個 html 屬性內,那么需要非常非常小心地進行轉義,這取決於哪個html 屬性。 如果在 sql 查詢中使用它,則需要通過特定於數據庫的轉義函數對其進行轉義,即使將其用作參數值(即where someColumn = '$paramVal' ),也必須以不同的方式轉義, vs 符號名稱,如表名、列名(即order by $myEscapedColumnName DESC )。 等等。

這完全是關於使用上下文,而不是字符串的內容。 這適用於一切(不僅僅是電子郵件或其他用戶輸入),這不僅是安全問題,也是編程和語法正確性的問題。 正確的轉義很復雜,需要花費大量時間來學習,並且在編碼時需要仔細思考和考慮。 許多程序員因為努力而懶得去做,他們是導致公司被黑客入侵的人。

僅供參考,電子郵件地址規范允許引用字符串,因此您可以注入諸如"<script>alert('xss')</script>"@example.com字符串。 可能性是顯而易見的。

這應該已經足夠好了,但自然地,在將它輸入到數據庫等時,您仍然應該逃脫它。您永遠不知道 PHP 或 Apache 等中可能存在什么樣的錯誤,無論如何都可能允許攻擊發生。

暫無
暫無

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

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