簡體   English   中英

如何保護SQL條目免受“元”注入?

[英]how do I protect an sql entry from a “meta” injection?

我有一個允許用戶保存圖像的網站。 我用“ mysql_real_escape_string”對mysql插入進行了清理,但是有人去了他的圖像描述中輸入了帶有內容重定向的元數據,以便每當我們的站點加載(也加載最新的圖像)時,它就會重定向。

如何清理字符串或sql查詢以防止這種情況?

提前致謝!

對於此特定示例,可以通過在輸出數據時使用htmlentities避免它:

<?php
$str = "A 'quote' is <b>bold</b>";

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str);

// Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str, ENT_QUOTES);
?>

要注意的是,它將破壞您保存的東西中幾乎不使用任何 HTML。 如果您試圖允許某些標簽而不允許其他標簽,那么它很快就會變得復雜得多。

mysql_real_escape_string僅用於防止sql注入。

為了防止XSS,您需要使用htmlspecialcharshtmlentities清理html內容。

我認為您應該使用htmlspecialchars(); 每次在從數據庫中放入任何東西之前以及在將用戶輸入提交到數據庫之前,都使用准備好的語句+ htmlspecialchars(); [可選的]

這是您可以做的幾件事

  1. 使用strip_tags()
  2. 使用mysqli_*函數代替mysql_
  3. 使用參數化查詢/准備好的語句。
  4. 如果可能,請考慮使用PHP框架。
  5. 將特殊字符轉換為各自的htmlentities()

暫無
暫無

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

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