簡體   English   中英

PHP $_GET 安全性、$_POST 安全性最佳實踐

[英]PHP $_GET security, $_POST security best practice

這是一個很好的主題,但我想在幾種不同的情況下對使用來自用戶變量的數據的方法進行一些確認。

  1. 該變量從不在數據庫中使用,從不存儲,僅在用戶屏幕上顯示。 使用哪個函數來確保沒有 html 或 javascript 可以搞砸?

  2. 該變量被引入數據庫,並在 SQL 查詢中使用。

  3. 變量兩者兼而有之。

目前我是xss_clean,和strip_tags。 我一直這樣做,只是通過自動駕駛儀。 有沒有更好的技術? 如果有相同的問題,請見諒。 我有點假設有,雖然我找不到像這樣徹底的。

干杯。

  1. 輸出時使用適當的函數,在 HTML 上下文中,這是htmlspecialchars
  2. 使用准備好的語句
  3. 請參閱 1. 和 2. – 取決於您是在顯示變量還是在查詢中使用它。

PHP 世界中最糟糕的錯覺之一是$_GET$_POST與安全性有關。

重要的不是源頭而是目的地

  • 如果您必須處理數據庫,則規則始終相同,無論數據來自$_POST 、SOAP 請求還是數據庫。 它必須始終相同:數據的占位符,其他所有內容的白名單。
  • 如果您必須將一些數據輸出到瀏覽器中,您必須正確准備它,無論數據來自$_POST 、SOAP 請求還是數據庫。
  • 如果您必須從文件中讀取 - 您必須保護文件名,無論它來自哪里,等等
  1. 在第一種情況下 htmlspecialchars() 可能是最好的選擇,允許用戶使用所有字符,如 <、>、& 等。
  2. 在第二種情況下,您將需要使用一些數據庫轉義函數,如 mysql_real_escape_string 或帶有 PDO 或 mysqli 的准備好的語句。 准備好的語句是這里的最佳選擇,但如果您只熟悉 mysql,那么 mysql_real_escape_string 也可以正常工作。 如果您不使用 mysql,那么大多數 SQL API 中都有類似的功能。
  3. 在第三種情況下,兩者都做,但分開做,會給你兩種不同的結果,一種用於輸出,一種用於數據庫。

參考:

http://php.net/manual/en/function.htmlspecialchars.php

http://php.net/manual/en/function.mysql-real-escape-string.php

http://php.net/manual/en/book.pdo.php

http://php.net/manual/en/book.mysqli.php

$id="1;drop table users;"; $id=mysql_real_escape_string($id); $sql="SELECT * FROM table

WHERE id=$id";

暫無
暫無

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

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