教你使用SQLite 注入

2021-10-09 19:51:39 字數 1745 閱讀 5247

sqlite 是乙個軟體庫,實現了自給自足的、無伺服器的、零配置的、事務性的 sql 資料庫引擎。sqlite 是在世界上最廣泛部署的 sql 資料庫引擎。sqlite 源**不受版權限制。

sqlite 注入

如果您的站點允許使用者通過網頁輸入,並將輸入內容插入到 sqlite 資料庫中,這個時候您就面臨著乙個被稱為 sql 注入的安全問題。本章節將向您講解如何防止這種情況的發生,確保指令碼和 sqlite 語句的安全。

注入通常在請求使用者輸入時發生,比如需要使用者輸入姓名,但使用者卻輸入了乙個 sqlite 語句,而這語句就會在不知不覺中在資料庫上執行。

永遠不要相信使用者提供的資料,所以只處理通過驗證的資料,這項規則是通過模式匹配來完成的。在下面的例項中,使用者名稱 username 被限制為字母數字字元或者下劃線,長度必須在 8 到 20 個字元之間 - 請根據需要修改這些規則。

if (preg_match("/^\w$/", $_get['username'], $matches))else
為了演示這個問題,假設考慮此摘錄:to demonstrate the problem, consider this excerpt:

$name = "qadir'; delete from users;";

@$db->query("select * from users where username=''");

函式呼叫是為了從使用者表中檢索 name 列與使用者指定的名稱相匹配的記錄。正常情況下,$name 只包含字母數字字元或者空格,比如字串 ilia。但在這裡,向 $name 追加了乙個全新的查詢,這個對資料庫的呼叫將會造成災難性的問題:注入的 delete 查詢會刪除 users 的所有記錄。

雖然已經存在有不允許查詢堆疊或在單個函式呼叫中執行多個查詢的資料庫介面,如果嘗試堆疊查詢,則會呼叫失敗,但 sqlite 和 postgresql 裡仍進行堆疊查詢,即執行在乙個字串中提供的所有查詢,這會導致嚴重的安全問題。

防止 sql 注入

在指令碼語言中,比如 perl 和 php,您可以巧妙地處理所有的轉義字元。程式語言 php 提供了字串函式 sqlite3::escapestring($string) 和 sqlite_escape_string() 來轉義對於 sqlite 來說比較特殊的輸入字元。

注意:使用函式 sqlite_escape_string() 的 php 版本要求為 php 5 < 5.4.0。 更高版本 php 5 >= 5.3.0, php 7 使用以上函式:

sqlite3::escapestring($string);//$string為要轉義的字串
以下方式在最新版本的 php 中不支援:

if (get_magic_quotes_gpc()) 

$result = @$db->query("select * from users where username=''");

雖然編碼使得插入資料變得安全,但是它會呈現簡單的文字比較,在查詢中,對於包含二進位制資料的列,like 子句是不可用的。

請注意,addslashes() 不應該被用在 sqlite 查詢中引用字串,它會在檢索資料時導致奇怪的結果。linux就該這麼學

教你PHP注入

用工具玩asp注入久了,今天試著進行了下php注入,雖然不是很完整,也拿出來分享下,首先用google hack 找個存在注入點的網頁,開啟google,輸入inurl php?id 隨便開啟個鏈結,如分別提交 and 1 1。再提交 and 1 2 發現返回的頁面不同,說明存在注入漏洞。再提交 a...

sqlite注入方法總結

0x00 概述 sqlite是乙個程序內的庫,實現了自給自足的 無伺服器的 零配置的 事務性的 sql 資料庫引擎。它是乙個零配置的資料庫,這意味著與其他資料庫一樣,您不需要在系統中配置。就像其他資料庫,sqlite 引擎不是乙個獨立的程序,可以按應用程式需求進行靜態或動態連線。sqlite 直接訪...

SQLite 使用總結

跟mysql是有所區別的,自己用了幾天,總結如下 1 不能用mysql的分號 如 select count as count from ken content 而應該用自己打上去的分號 如 select count as count from ken content 2 主鍵一定要用 integer...