多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

sqlite教程

SQLite 注入

閱讀 (2079)

SQLite 注入

如果您的站點允許用戶通過網頁輸入,并將輸入內容插入到 SQLite 數據庫中,這個時候您就面臨著一個被稱為 SQL 注入的安全問題。本章節將向您講解如何防止這種情況的發生,確保腳本和 SQLite 語句的安全。

注入通常在請求用戶輸入時發生,比如需要用戶輸入姓名,但用戶卻輸入了一個 SQLite 語句,而這語句就會在不知不覺中在數據庫上運行。

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

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)){
   $db = new SQLiteDatabase('filename');
   $result = @$db->query("SELECT * FROM users WHERE username=$matches[0]");
}else{
   echo "username not accepted";
}

為了演示這個問題,假設考慮此摘錄:To demonstrate the problem, consider this excerpt:

$name = "Qadir'; DELETE FROM users;";
@$db->query("SELECT * FROM users WHERE username='{$name}'");

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

雖然已經存在有不允許查詢堆疊或在單個函數調用中執行多個查詢的數據庫接口,如果嘗試堆疊查詢,則會調用失敗,但 SQLite 和 PostgreSQL 里仍進行堆疊查詢,即執行在一個字符串中提供的所有查詢,這會導致嚴重的安全問題。

防止 SQL 注入

在腳本語言中,比如 PERL 和 PHP,您可以巧妙地處理所有的轉義字符。編程語言 PHP 提供了字符串函數 sqlite_escape_string() 來轉義對于 SQLite 來說比較特殊的輸入字符。

if (get_magic_quotes_gpc()) 
{
  $name = sqlite_escape_string($name);
}
$result = @$db->query("SELECT * FROM users WHERE username='{$name}'");

雖然編碼使得插入數據變得安全,但是它會呈現簡單的文本比較,在查詢中,對于包含二進制數據的列,LIKE 子句是不可用的。

請注意,addslashes() 不應該被用在 SQLite 查詢中引用字符串,它會在檢索數據時導致奇怪的結果。

關閉
程序員人生
主站蜘蛛池模板: 国内精品网站 | 激情综合五月天丁香婷婷 | 亚洲视频综合网 | 国产精品爱久久久久久久三级 | 免费的禁片 | 国内精品免费视频精选在线观看 | 男女xx00| 成年人视频在线免费观看 | 日本精品a在线 | 亚洲人成777在线播放 | 亚洲天堂一区二区三区四区 | 波多野结衣一区免费作品 | 最近最新高清免费中文字幕 | 五月天看片 | 免费观看性欧美毛片 | 手机看片福利盒子 | 午夜精品久久久久久久第一页 | 亚洲国产精品综合久久一线 | 女人18毛片特级一级免费视频 | 国产永久免费高清动作片www | 日本不卡免费在线 | 在线播放国产一区 | 欧美性猛交xxxxx按摩欧美 | 免费观看在线永久免费xx视频 | 亚洲欧洲一区 | 日本护士xxx人 | 成人一a毛片免费视频 | 国产精品亚洲午夜不卡 | 亚洲国产成人资源在线软件 | 欧美video free xxxxx| 欧美性猛交xxxx乱大交 | 日本爽 | 亚洲精品在线视频观看 | 日本一区不卡视频 | 国产欧美亚洲精品a | 东京干手机福利视频 | 毛片的网站 | 日韩精品一区二区三区免费视频 | 曰本www| 亚洲欧洲一区二区三区 | 国产免费福利视频一区二区 |