❶ 一上,為什麼說Mysql預處理可以防止SQL注入
簡單點理解:prepareStatement會形成參數化的查詢,例如:
1
select * from A where tablename.id = ?
傳入參數'1;select * from B'如果不經過prepareStatement,會形成下面語句:
1
select * from A where tablename.id = 1;select * from B
這樣等於兩次執行,但如果經過預處理,會是這樣:
1
select * from A where tablename.id = '1;select * from B'
'1;select * from B'只是一個參數,不會改變原來的語法
❷ 什麼樣的mysql語句可以防止sql注入漏洞
不是在mysql端防止,而是在拼sql語句的時候對條件參數進行過濾可疑關鍵字,例如:'
;
or
=
之類的。
❸ 在MySQL里如何識別並且避免發生SQL注入風險
過濾一些常見的資料庫操作關鍵字,
select ,insert,update,delete,and,*等或通過系統函數addslashes對內容進行過濾
php配置文件中register_globals=off;設置為關閉狀態.(作用將注冊全局變數關閉);如接收POST表單的值使用$_POST['user'],假設設置為ON的話$user才接收值
sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號
提高資料庫命名技巧,對於一些重要的欄位根據程序的特點命名,使之不易被猜中
對於常的方法加以封裝,避免直接暴漏SQL語句
開啟PHP安全模式safe_mode=on
打開magic_quotes_gpc來防止SQL注入,默認為關閉,開啟後自動把用戶提交sql查詢語句進行轉換把"'"轉換成"\'"
控制錯誤信息輸出,關閉錯誤信息提示,將錯誤信息寫到系統日誌
使用MYSQLI或PDO預處理
❹ mysql的sql注入,為什麼 or 1=1就執行了,不是作為前邊條件的拼接字元串
一樣是作為拼接字元串,不過因為id這個值沒有做任何處理 直接做了一個拼接 所以才導致攻擊者可以構造相應的sql語句來攻擊
❺ mysql 被SQL注入 求解
使用軟體在程序目錄裡面搜索殺軟提示的木馬鏈接,如果沒有在程序頁面里搜索到,那很有可能是伺服器所在機房造ARP病毒,網頁被劫持了。
❻ 什麼是mysql注入
MySQL SQL 注入
SQL注入可能是目前互聯網上存在的最豐富的編程缺陷。 這是未經授權的人可以訪問各種關鍵和私人數據的漏洞。 SQL注入不是Web或資料庫伺服器中的缺陷,而是由於編程實踐較差且缺乏經驗而導致的。 它是從遠程位置執行的最致命和最容易的攻擊之一。
我們永遠不要信任用戶的輸入,我們必須認定用戶輸入的數據都是不安全的,我們都需要對用戶輸入的數據進行過濾處理。
以下實例中,輸入的用戶名必須為字母、數字及下劃線的組合,且用戶名長度為 8 到 20 個字元之間:
以上的注入語句中,我們沒有對 $name 的變數進行過濾,$name 中插入了我們不需要的SQL語句,將刪除 users 表中的所有數據。
在PHP中的 mysqli_query() 是不允許執行多個 SQL 語句的,但是在 SQLite 和 PostgreSQL 是可以同時執行多條SQL語句的,所以我們對這些用戶的數據需要進行嚴格的驗證。
防止SQL注入,我們需要注意以下幾個要點:
永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和 雙」-「進行轉換等。
永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
.永遠不要使用管理員許可權的資料庫連接,為每個應用使用單獨的許可權有限的資料庫連接。
不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
sql注入的檢測方法一般採取輔助軟體或網站平台來檢測,軟體一般採用sql注入檢測工具jsky,網站平台就有億思網站安全平台檢測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS可以有效的防禦SQL注入,XSS攻擊等。
教程來源:樹懶學堂_一站式數據知識學習平台_MySQK 防止SQL注入
❼ 關於SQL注入,到底是怎麼的
簡單來說, 你要在意的, 就是會 "寫入" 資料庫的東西, 而問題會出錯在那呢 ?
就是如果對方寫入的 東西 能變成你 SQL statement 的一部份時, 你就中標了.
樓上就給了個很好的例子, 如果你寫 php 的, 建議你要認真詳細地看看這幾道指令:
addslashes()
mysqli_real_escape_string()
pg_escape_string()
get_magic_quotes_gpc()
另外, 說起 injection, 我也想起 xss, 如果對方寫給你的東西能變成你頁面的一部份,
那你也同樣能中標, 不過效果是, 你的網站可以被騎劫或者洩露 cookies , 這樣的時候,
也建議你看看
htmlentities()
❽ Mysql資料庫拼接且防注入
<?php
//------show_xml.php------
error_reporting(E_ALL ^ E_NOTICE);
include_once("../include/mysql.class.php"); //資料庫類
include_once("../config/config.php"); //資料庫連接配置文件
header("Content-type:text/xml"); print("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
$db = new mysql(); //connect MYSQL
$query="select * from a order by id asc";
$result=$db->query($query);
while ($row = $db->fetch_array($result))
{
print("<document_info><source id='".$row[id]."'>".$row[name]."</source></document_info><content><title>".$row[num]."</title></content>");
}
$db->close();
?>
❾ 關於SQL注入。
我還沒進公司時,網站平均15天被注入一次,我進公司以後,大力整改,至今3個月,未見被注入。
我告訴你我的方法。
總結起來就是:關鍵詞屏蔽或替換 + 參數法sql。
1.封裝一個類,用來將傳入的參數進行關鍵詞的屏蔽和替換(像ID之類的參數,可以屏蔽關鍵詞的就完全屏蔽,像textarea這樣不能完全屏蔽的,就把關鍵詞替換,如將半形的'替換成全形』。還要限制參數的字數(很重要)
2.將所有需要和資料庫打交道的地方全部進行參數化sql。
如將sql="select * from table where id='"+value+"'"
改sql="select * from table where id=@id"
寫一個類,裡面專門存放參數法sql的各種方法,雖然會麻煩一些,但是非常非常有效,可以杜絕絕大多數sql注入。
這樣,雙管其下,基本可以防止sql注入了
❿ 用最簡單的方法講解什麼是SQL注入
一個資料庫一般都包含有若干張表,如同我們前面暴出的資料庫中admin表包含有管理員信息,而user表則包含有所有的論壇用戶信息一樣。以下面這張表為例:
Dv_User
UserID UserName UserPassword UserEmail UserPost
1 admin 469e80d32c0559f8 [email protected] 0
2 Test 965eb72c92a549dd [email protected] 0
這是DVBBS 7.0的資料庫中所有用戶資料的表,Dv_User 是表名。每一行代表一個用戶,每一列是該用戶的某種屬性。我們最感興趣的自然是用戶名與密碼這樣的屬性了。
SQL是一種用於操作資料庫的規范化語言,不同的資料庫(MSSQL、MYSQL、ORACLE……)大體上都是一樣的。比如我們要查詢資料庫中的信息:
select UserName,UserPassword from Dv_User where UserID=1;
這就是一個最典型的SQL查詢語句,它的意思是,在Dv_User這張表中,將UserID為1的用戶名與密碼查詢出來。
得到的結果是:admin 469e80d32c0559f8
SELECT語句語法:
SELECT [列名],[列名2]…… FROM [表名] WHERE [限制條件]
例:
SELECT * FROM Dv_User where UserID=1
表示查詢UserID為1的所有信息。
更新:
UPDATE [表名] SET [列名]=新值 WHERE [限制條件]
例:
UPDATE Dv_User set [UserPassword]=』 965eb72c92a549dd』 WHERE UserName=』admin』
此語句將把Dv_User表中的UserName為admin的那一行中UserPassword的值改為965eb72c92a549dd。
刪除:
DELETE FROM [表名] WHERE [限制條件]
例:
DELETE FROM Dv_User WHERE UserName=』test』
將用戶名為test的那一行從Dv_User表中刪除
二、SQL注射漏洞簡述
SQL語法看很容易上手,那SQL漏洞是怎麼來的呢?」
if id<>"" then
sql="SELECT * FROM [日記] WHERE id="&id
rs.Open sql,Conn,1
我們這段代碼是提取自BBSXP論壇的,經過我改動以後,把它做成了一個有漏洞的頁面給你講述SQL漏洞的原理。」
那張日記的表內容如下:
日記
id username title content adddate
我們訪問 localhost/bbsxp/blog.asp?id=1
的時候結果如圖1。
「訪問blog.asp的時候,我們提交的參數id為1,那麼放到SQL語句里就變成了:
SELECT * FROM [日記] WHERE id=1
所以就得到我們看到的那個頁面,這就是sql注入的成因。
1樓2010-07-17 09:52
舉報 |
個人企業舉報
垃圾信息舉報
C級丶娛樂
正式會員
5
SQL漏洞的起源就從這里開始了!注意到了嗎?id的值是由我們提交的