[英]Where to use mysql_real_escape_string to prevent SQL Injection?
我和一群黑客有麻煩。 他們幾次攻擊我的客戶的網站,我的客戶端更生氣:(我的客戶丟失了他的數據庫(有數百條記錄),並且不得不輸入所有:(
現在我正在進行更多的介紹;
現在正致力於SQL注入問題。 我將mysql_real_escape_string添加到管理面板登錄參數。 那么我應該在哪里使用這個mysql_real_escape_string呢? 我在網站上的電子郵件表格很少,我不認為我需要添加...
我有一個index.php作為主頁。 我是否應該為此頁面做任何事情以防止任何sql注入攻擊通過url如index.php?somesql=
?
請建議我! 我很感激!!! :(
例如:
我有這樣的代碼;
public function showDetails($id) {
// SQL Jobs Details
$this->sql_job = "SELECT * FROM jobs WHERE id=".mysql_real_escape_string($id);
$this->rst_job = mysql_query($this->sql_job);
$this->row_all = mysql_fetch_assoc($this->rst_job);
// SQL State
$this->sql_state = "SELECT title FROM state WHERE id=" . $this->row_all[$this->tbl_jobs['f4']];
$this->rst_state = mysql_query($this->sql_state);
$this->row_state = mysql_fetch_assoc($this->rst_state);
........
是否足以使用mysql_real_escape_string作為$ id。 不是$ this-> row_all [$ this-> tbl_jobs ['f4']]
基本上,每次在SQL查詢中使用一些不安全的數據(用戶輸入,數據庫,文件或外部網站的值,即您不能100%確定它是安全的任何數據)時,您應該使用它來轉義它mysql_real_escape_string 。 請注意, 根據OWASP ,此函數對於轉義動態表名稱並不安全(但這遠不如“基本”用戶輸入插入那么常見)。
我建議你看一下關於SQL注入的整篇OWASP文章 ,還要瀏覽網站的其他部分。 它是有關Web應用程序安全性的重要信息來源。
IMO,防止SQL注入的首選方法是使用預准備語句 。
請記住,如果您確實選擇使用mysql_real_escape_string()
它只能在由引號分隔的字符串中使用時才有效。 切勿在任何未引用的值上使用它。 這包括數值; 相反,驗證用戶輸入實際上是數字。
用戶輸入的兩個最重要的事情是
輸入過濾是轉換數據/ [之前] /它存儲在數據庫中的過程。 執行mysql_real_escape_string()
屬於此步驟(盡管有更好的方法可以清理數據庫插入的用戶數據),但此步驟還可以包括修剪空白區域,褻瀆過濾,標記轉換等。
將用戶內容發送到不允許惡意行為的瀏覽器時,輸出轉義非常重要。 這意味着執行htmlentities()
或其他一些選擇性篩選過程。
您還可以執行其他操作,例如資源限制(DOS預防),表單令牌(CSRF保護)等。轉到OWASP並開始閱讀。
Web開發的黃金法則之一是永遠(永遠!)信任用戶輸入。 因此,在數據進入數據庫的任何地方,都應該調用mysql_real_escape_string()。
此外,為了防止將來生氣的客戶,您應該定期備份您的數據庫。 如果我是你的客戶,我現在會生氣。
祝你的網站安全。
防止SQL注入的最佳方法是使用預准備語句和綁定變量。 您使用的是哪個版本的MySQL? 准備好的聲明有4.1及更高版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.