-
新增斜槓時,將瀏覽器提交的 POST 和 GET 變數新增到 SQL 查詢中,盡量避免直接使用。
-
注入攻擊的型別。
攻擊動機可能有很多種,但乍一看,似乎還有更多型別的仿橡樹。 這是非常正確的 - 如果惡意使用者發現了執行多個查詢的方法。 我們將在本文後面更詳細地討論這一點。
如。 如果您的指令碼正在執行 select 命令,則攻擊者可以通過在 where 子句中新增條件注釋(如 =1)來強制顯示記錄的每一行,如下所示(其中注入的部分以粗體顯示):
select*fromsiteswheresite=''or1=1;'
正如我們之前所討論的,這本身就是有用的資訊,因為它揭示了**的一般結構(這在正常記錄中是不可能的),並可能揭示包含機密資訊的記錄。
更新指令有可能成為更直接的威脅。 通過在 set 子句中放置其他屬性,攻擊者可以修改當前更新的記錄中的任何字段,例如以下示例(其中注入部分以粗體顯示):
updatesitessetsite=''where=
site=''
通過向更新指令的 where 子句新增常數真值條件(如 1=1),可以將此修改的範圍擴充套件到每條記錄,如以下示例所示:
updatesitessetsite=''where=
site=';'
最危險的指令可能是刪除 - 這並不難想象。 注入技術與我們已經看到的相同 - 通過修改 where 子句來擴充套件受影響記錄的範圍,如下例所示
deletefromsitessetsite=''where=
site=';
-
執行此操作的有效方法是使用引數化查詢。 在引數化查詢中,預定義查詢語句,然後將變數放在佔位符中。 執行查詢時,可以安全地將值繫結到佔位符,而不會冒任何 SQL 注入攻擊的風險。
例如:query = select * from users where username = username and password = password";
stmt = db->prepare($query);
stmt->bindvalue(':username', username);
stmt->bindvalue(':password', password);
stmt->execute();
這裡 :username 和 :password 是佔位符,在執行查詢時將替換為實際變數值。
使用引數化查詢是針對 SQL 注入攻擊的有效保護措施,因為它不包括使用者輸入作為 SQL 語句的一部分。
此外,可以使用逃逸功能護罩處理使用者輸入,以防止 SQL 注入室攻擊。 在 PHP 中,您可以使用 Mysqli Real Escape String 函式來轉義使用者 Yu Sun 輸入。 例如:
username = mysqli_real_escape_string($db, $username);
這允許對使用者輸入中的特殊字元進行轉義,以防止 SQL 注入攻擊。
-
防止 SQL 注入攻擊的方法包括:
使用預處理語句和繫結引數:使用PDO或MySQLI等庫提供的預處理語句和繫結引數,可以將引數與SQL查詢語句分開,避免相思SQL注入攻擊。
過濾輸入資料:在接收使用者輸入資料時對資料進行過濾和驗證,例如使用 PHP 內建函式,如 filter var()、htmlspecialchars() 等。
使用安全編碼:在資料庫中插入或更新資料時使用安全編碼,例如將特殊字元轉義到 HTML 實體中或使用 addslashes() 來表達悔改。
限制資料庫使用者許可權:為了最大程度地減少損失,應將資料庫使用者許可權限制為唯讀或只寫,而不是具有管理員許可權。
-
防止SQL注入的一種簡單方法是使用框架,這些框架通常與各種安全措施整合在一起。
當然,你也可以自己處理,如果使用者的輸入可以直接插入到SQL語句中,那麼應用就容易受到SQL注入攻擊。 我認為最重要的是檢查和轉義資料型別。
display errors 選項,該選項應設定為 display errors = off。 這樣,如果PHP指令碼失敗,它就不會在網頁上輸出錯誤,使攻擊者無法分析資訊。
開啟魔術引號 gpc 防止 SQL 注入,魔術引號 gpc = off,這個預設是關閉的,如果開啟了,會自動將使用者提交的查詢轉換為 SQL,比如 put'轉到'等,在防止SQL注入方面發揮了重要作用。 如果 magic 引號 gpc=off,則使用 addslashes() 函式。
MySQL 函式
呼叫MySQL查詢等MySQL函式時,應在它前面加上@,即@mysql查詢(..)。這樣就不會輸出mysql錯誤。 這同樣是正確的,因此攻擊者不會分析有用的資訊。
此外,一些程式設計師在進行開發時習慣於在MySQL Query出錯時輸出錯誤和SQL語句。
MySQL Real Escape String -- 對 SQL 語句中使用的字串中的特殊字元進行轉義,同時考慮串聯的當前字符集。
SQL 語句
轉義並鍵入 check 提交的 SQL 語句。 如果請求是數字的,則呼叫是 numeric() 以確定請求是否為數字。 否則,將返回程式指定的預設值。
為了簡單起見,對於文字字串,我轉義了使用者輸入的所有危險字元(包括 html**)。 由於 php 函式 addslashes() 中的乙個錯誤,我直接用 str replace() 替換了它。 Get Magic Quotes gpc() 函式是乙個 PHP 函式,用於確定 Magic Quotes GPC 選項是否已開啟。
雜項
使用預處理語句和引數化查詢(PDO 或 MySQLI)。 預處理的語句和引數將傳送到資料庫伺服器進行解析,引數被視為普通字元。 此方法可防止攻擊者注入惡意 SQL 語句。
-
篩選不符合要求的字元。
-
最好在前台使用者打字時,使用常規或 php 方法過濾掉或替換注入的資訊。
PHP很簡單。 PHP技能太多了。 不推薦。
因為它太簡單了。 這一切都是在中國完成的。 沒有人可以用PHP編寫程式。 >>>More
一般來說,如果配置的伺服器是北京時間,並且線上空間提供商已經配置了空間伺服器,如果格林威治標準時間沒有配置,此時需要編寫 if(function exists('date_default_timezone_set')) >>>More
我是php程式設計師,我會回答的。
我們知道PHP是一種Web指令碼語言,但是現在一些中型和大型**也是用PHP實現的。 例如,在早期,它是用PHP構建的。 PHP應該比較簡單,開發周期短,產品成本低。 >>>More
1.使簡歷的內容脫穎而出。
內容就是一切,因此突出您的能力、成就和過去的經驗很重要。 簡歷的內容應仔細分析您的能力,並表明您有資格勝任這份工作。 >>>More