亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是SQL注入

什么是SQL注入

慕慕森 2019-05-21 16:25:54
什么是SQL注入?有人可以解釋SQL注入嗎?它是如何導致漏洞的?注入SQL的確切位置在哪里?
查看完整描述

4 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

當應用程序的用戶能夠影響數據庫查詢的含義時,就會發生SQL注入。當用戶輸入的任意字符串連接起來創建提供給數據庫的SQL時,通常會發生這種情況。例如,假設我們有以下代碼(在PHP中,但對于任何語言都是如此),可能用于處理用戶登錄。

$sql = "SELECT  FROM users WHERE username='".$_GET['username']."' AND password='".$_GET['password']."'";

當用戶輸入類似內容時會造成傷害

administrator'; --

...用于用戶名。沒有適當的編碼,查詢將變為:

SELECT * FROM users WHERE username='administrator'; -- AND password=''

這里的問題是'在用戶名中關閉用戶名字段然后 - 啟動SQL注釋,導致數據庫服務器忽略字符串的其余部分。最終結果是用戶現在可以以管理員身份登錄,而無需知道密碼。SQL Inection還可用于執行UPDATE,DELETE或DROP查詢,并真正損壞數據庫。

可以通過使用參數化查詢或應用語言/工具包的轉義函數(例如PHP中的mysql_real_escape_string())來防止SQL注入。

一旦你理解了SQL注入,你就會得到這個漫畫背后的笑話。


查看完整回答
反對 回復 2019-05-21
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

SQL注入是指那些應該是數據的東西被不情愿地視為SQL代碼。

例如,如果你這樣做的話

mysql_query("SELECT * FROM posts WHERE postid=$postid");

通常它會給你帶有給定id的帖子,但是假設它$postid被設置為字符串10; DROP TABLE posts --; 突然之間,您發送的實際查詢是

mysql_query("SELECT * FROM posts WHERE postid=10; DROP TABLE posts --");

這是一個很大的問題,因為你會因惡意用戶丟失整個帖子表 - 哦親愛的。

防止這種情況的最簡單方法是使用準備語句,例如通過PDOMySQLi

那么PDO中的等效示例就是

$statement = $db->prepare('SELECT * FROM posts WHERE postid = :postid');$statement->bindValue(':postid', $postid);$statement->execute();

這樣做可以確保數據庫系統知道$ postid將被視為數據而不是代碼,因此將被適當地處理。


查看完整回答
反對 回復 2019-05-21
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

SQL注入是惡意用戶將SQL放入輸入字段以嘗試在您的服務器上運行SQL的地方。

我堅持的#1建議是使用參數化存儲過程而不是在代碼中構建原始SQL。

存儲過程參數不會被執行,在大多數情況下使它們安全。


查看完整回答
反對 回復 2019-05-21
  • 4 回答
  • 0 關注
  • 466 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號