亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用PHP清理用戶輸入的最佳方法是什么?

用PHP清理用戶輸入的最佳方法是什么?

PHP
開滿天機 2019-05-22 15:03:34
用PHP清理用戶輸入的最佳方法是什么?是否有一個catchall函數適用于清理SQL注入和XSS攻擊的用戶輸入,同時仍允許某些類型的html標記?
查看完整描述

5 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

這是一種常見的誤解,即用戶輸入可以被過濾。PHP甚至還有一個(現已棄用的)“功能”,稱為魔術引號,它建立在這個想法的基礎之上。這是胡說八道。忘記過濾(或清潔,或任何人稱之為)。

為了避免出現問題,你應該做的很簡單:每當你在外國代碼中嵌入一個字符串時,你必須根據該語言的規則來逃避它。例如,如果在某些SQL目標MySql中嵌入字符串,則必須為此目的使用MySql函數轉義字符串(mysqli_real_escape_string)。(或者,對于數據庫,如果可能,使用預處理語句是更好的方法)

另一個例子是HTML:如果在HTML標記中嵌入字符串,則必須使用它進行轉義htmlspecialchars。這意味著每個單詞echoprint語句都應該使用htmlspecialchars

第三個例子可能是shell命令:如果你要將字符串(例如參數)嵌入到外部命令中,并用它們調用它們exec,那么你必須使用escapeshellcmdescapeshellarg。

等等等等 ...

您需要主動過濾數據的唯一情況是,您是否接受預先格式化的輸入。例如。如果您允許用戶發布HTML標記,那么您計劃在網站上顯示該標記。但是,你應該不惜一切代價避免這種情況,因為無論你如何過濾它,它總是一個潛在的安全漏洞。


查看完整回答
反對 回復 2019-05-22
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

不可以。如果沒有任何上下文,您無法對數據進行一般過濾。有時您想要將SQL查詢作為輸入,有時您希望將HTML作為輸入。

您需要過濾白名單上的輸入 - 確保數據符合您期望的某些規范。然后,您需要在使用它之前將其轉義,具體取決于您使用它的上下文。

轉義SQL數據的過程 - 防止SQL注入 - 與轉換(X)HTML數據的過程非常不同,以防止XSS。


查看完整回答
反對 回復 2019-05-22
?
慕田峪9158850

TA貢獻1794條經驗 獲得超8個贊

不,那里沒有。

首先,SQL注入是一個輸入過濾問題,XSS是一個輸出轉義問題 - 所以你甚至不會在代碼生命周期中同時執行這兩個操作。

基本的經驗法則

  • 對于SQL查詢,綁定參數(與PDO一樣)或對查詢變量使用驅動程序本機轉義函數(例如mysql_real_escape_string()

  • 使用strip_tags()過濾掉不需要的HTML

  • htmlspecialchars()在此處轉義所有其他輸出并注意第二和第三參數。


查看完整回答
反對 回復 2019-05-22
  • 5 回答
  • 0 關注
  • 669 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號