[英]Is Regex for Form Validation if I use the following?
我知道無論如何添加它都沒有害處,但我很好奇......
如果我要使用htmlentities(); 使用ENT_QUOTES然后使用mysql_real_escape_string(); 在將變量輸入數據庫之前的變量,然后只需使用html_entity_decode(); 與stripslashes(); 顯示信息......
這仍然是安全的嗎?
在將數據存儲到數據庫之前,您不需要使用htmlentities。 事實上,如果你不這樣做,它會讓事情變得更容易。 在HTML輸出中回顯它們時,只對字符串使用htmlentities(無論是從數據庫還是從其他來源獲取字符串)。
從數據庫中獲取數據后,您不需要對數據應用stripslashes。 數據庫沒有存儲額外的轉義字符 - 除非您錯誤地應用了雙重轉義。
這是正確的順序:
從表單中獲取數據
$input = $_GET["input"];
申請逃脫一次 。
$quoted_input = "'" . mysql_real_escape_string($input) . "'";
將其插入數據庫
$sql = "INSERT INTO MyTable (column1) VALUES ($quoted_input)"; $success = mysql_query($sql);
稍后從數據庫中獲取它
$sql = "SELECT column1 FROM MyTable"; $result = mysql_query($sql); $row = mysql_fetch_assoc($result); $data = $row["column1"];
輸出時應用htmlentities 一次 。
echo htmlentities($data);
如果您知道這些函數的用途,您可以自己回答這個問題:
htmlentities
是替換HTML特殊字符&
, <
, >
和"
和可以由實體字符引用表示的字符 。這用於編碼數據,以便在任何HTML上下文中安全地輸出(特別是使用ENT_QUOTES,以便它甚至可以在單引號屬性值中使用。)例如:
<textarea><?php echo htmlentities('</textarea>'); ?></textarea>
mysql_real_escape_string
用於替換MySQL字符串中的特殊字符,同時考慮連接字符編碼(需要使用mysql_client_encoding
)。 這用於編碼要在MySQL字符串中安全使用的數據。 例如:
$query = 'SELECT "'.mysql_real_escape_string("\\n\\r\\t\\v\\f\\\\\\"").'"';
html_entity_decode
是htmlentities
的反函數,並替換HTML字符引用(數字和實體字符引用)。
stripslashes
刪除了轉義字符\\
。
如果您只想保護自己免受SQL注入,請將mysql_real_escape_string
用於MySQL查詢中使用的數據。 您還可以使用預准備語句或參數化查詢構建器(請參閱准備語句的SQL語法 , PDO - 准備語句和存儲過程 , MySQLi :: prepare等)。
你問的是你是否還需要正則表達式作為所有這些功能旁邊的表單驗證?
如果這就是你所要求的那么在我看來是的,你永遠不夠安全。 我剛剛編寫了一個驗證類,其函數可以在需要特定輸入時使用正則表達式清理代碼和其他函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.