當前位置:首頁 » 編程語言 » SQL篡改

SQL篡改

發布時間: 2022-09-03 21:50:22

❶ 我的資料庫sql2000經常被惡意篡改,但我又需要遠程連接資料庫讀取數據,能有什麼辦法保護嗎

更換下連接密碼,定期更改密碼,換成SQL 2005 或 SQL 2005 版本的也行。

❷ SQL注入攻擊與防範

關於SQL注入攻擊與防範

隨著網路的普及,關系資料庫的廣泛應用,網路安全越來越重要。下面是我為大家搜索整理了關於SQL注入攻擊與防範,歡迎參考閱讀,希望對大家有所幫助。想了解更多相關信息請持續關注我們應屆畢業生培訓網!

一、 SQL注入攻擊

簡言之,SQL注入是應用程序開發人員未預期地把SQL代碼傳入到應用程序的過程。它由於應用程序的糟糕設計而成為可能,並且只有那些直接使用用戶提供的值構建SQL語句的應用程序才會受影響。

例如:用戶輸入客戶ID後,GridView顯示客戶的全部行記錄。在一個更加真實的案例中,用戶還要輸入密碼之類的驗證信息,或者根據前面的登錄頁面得到用戶ID,可能還會有一些用戶輸入關鍵信息的文本框,如訂單的日期范圍或產品名稱。問題在於命令是如何被執行的。在這個示例中,SQL語句通過字元串構造技術動態創建。文本框txtID的值被直接復制到字元串中。下面是代碼:

在這個示例中,攻擊者可以篡改SQL語句。通常,攻擊的第一個目標是得到錯誤信息。如果錯誤沒有被恰當處理,底層的信息就會暴露給攻擊者。這些信息可用於進一步攻擊。

例如,想像一下在文本一下在文本框中輸入下面的字元串會發生什麼?

ALFKI'OR '1'='1

再看看因此生成的完整SQL語句:

這條語句將返回所有的訂單記錄,即便那些訂單不是由ALFDI創建,因為對每一行而言而有信1=1總是true。這樣產生的後果是沒有顯示當前用戶特定信息,卻向攻擊者顯示了全部資料,如果屏幕上顯示的是敏感信息,如社會保險號,生日或信用卡資料,就會帶來嚴重的問題。事實上,這些簡單的SQL注入往往是困擾那些大型電子商務公司的麻煩。一般而言,攻擊點不在於文本框而在於查詢字元串(可被用於向資料庫傳送值,如列表頁向詳細信息頁面傳送唯一標識符)。

還可以進行更復雜的攻擊。例如,攻擊者可以使用兩個連接號(--)注釋掉SQL語句的剩餘部分。這樣的攻擊只限於SQL Server,不過對於其他類型的資料庫也有等效的辦法,如MySql使用(#)號,Oracle使用(;)號。另外攻擊者還可以執行含有任意SQL語句的批處理命令。對於SQL Server提供程序,攻擊者只需在新命令前加上分號(;)。攻擊者可以採用這樣的方式刪除其他表的內容,甚至調用SQL Server的系統存儲過程xp_cmdshell在命令執行任意的程序。

下面是攻擊者在文本框中輸入的,它的攻擊目標是刪除Customers表的全部行。

LUNCHUN』;DELETE*FROM Customers--

二、防範

如何預防SQL注入攻擊呢?需要記住幾點。首先,使用TextBox.MaxLength屬性防止用戶輸入過長的字元是一個好辦法。因為它們不夠長,也就減少了貼入大量腳本的可能性。其次,要使用ASP.NET驗證控制項鎖定錯誤的數據(如文本、空格、數值中的特殊字元)。另外,要限制錯誤信息給出的提示。捕獲到資料庫異常時,只顯示一些通用的信息(如「數據源錯誤」)而不是顯示Exception.Message屬性中的信息,它可能暴露了系統攻擊點。

更為重要的是,一定要小心去除特殊字元。比如,可以將單引號替換為兩個單引號,這樣它們就不會和SQL語句的分隔符混淆:

string ID=txtID.Text().Replace(「』」,」』』」);

當然,如果文本確實需要包含單引號,這樣做就引入了其他麻煩。另外,某些SQL注入攻擊還是可行的。替換單引號可以防止用戶提前結束一個字元串,然而,如果動態構建含有數值的SQL語句,SQL注入攻擊又有發揮的空間了。這個漏洞常被(這是很危險的)忽視。更好的解決辦法是使用參數化的命令或使用存儲過程執行轉義以防止SQL注入攻擊。

另一個好建議是限制用於訪問資料庫的賬號的許可權。這樣該賬號將沒有許可權訪問其他資料庫或執行擴展的存儲過程。不過這樣並不能解決SQL腳本注入的問題,因為用於連接資料庫的進程幾乎總是需要比任意單個用戶更大的許可權。通過限制許可權,可以預防刪除表的攻擊,但不能阻止攻擊者偷看別人的.信息

三、POST注入攻擊

精明的用戶可能會知道還有另外一個Web控制項攻擊的潛在途徑。雖然參數化的命令防止了SQL注入攻擊,但它們不能阻止攻擊者向回發到伺服器的數據添加惡意的值。如果不檢查這些值,就使得攻擊者可以提交本來不可能存在的控制項值。

例如,假設你有一個顯示當前用戶訂單的列表。狡詐的攻擊者可能保存該頁面的一個本地副本,修改HTML內容向列表添加更多的項目,然後選擇某個「假」的項目。如果攻擊成功,攻擊者就能夠看到其他用戶訂單,這顯然是一個問題。幸好,ASP.NET使用一個很少被提及的叫做「事件驗證」的特性來防止這種攻擊。事件驗證檢查回發到伺服器的數據並驗證其中值的合法性。例如,如果回發的數據表明用戶選擇了一個沒有意義的數據(因為它在控制項中並不存在),ASP.NET就產生一個錯誤並停止處理。可以在Page指令中設置EnableEventValidation特性為false來禁用事件驗證。創建使用客戶端腳本動態改變內容的頁面時,需要執行這一步。不過,此時在使用這些值之前要注意檢查潛在的POST注入攻擊。

;

❸ SQL注入的特點與危害分別有哪些

1、廣泛性:任何一個基於SQL語言的資料庫都可能被攻擊,很多開發人員在編寫Web應用程序時未對從輸入參數、Web表單、Cookie等接收到的值進行規范性驗證和檢測,通常會出現SQL注入漏洞。
2、隱蔽性:SQL注入語句一般都嵌入在普通的HTPP請求中,很難與正常語句區分開,所以當前許多防火牆都無法識別予以警告,而且SQL注入變種極多,攻擊者可以調整攻擊的參數,所以使用傳統的方法防禦SQL注入效果非常不理想。
3、危害大:攻擊者可以通過SQL注入獲取到伺服器的庫名、表名、欄位名,從而獲取到整個伺服器中的數據,對網站用戶的數據安全有極大的威脅。攻擊者也可以通過獲取到的數據,得到後台管理員的密碼,然後對網頁頁面進行惡意篡改。這樣不僅對資料庫信息安全造成嚴重威脅,對整個資料庫系統安全也有很大的影響。
4、操作方便:互聯網上有很多SQL注入工具,簡單易學、攻擊過程簡單,不需要專業的知識也可以自如運用。

❹ sql注入 篡改頁面 如何做到

用了參數查詢方法,現在已經基本不存在這種現象了,那些完全用sql語句的網站還是可以的,比如登陸,一般形式為:
select * from user where uid='網頁提交的用戶名' and pwd='網頁提交的密碼'
由於sql中的--是注釋的意思,我們可以這樣寫用戶名:
' or 1 > 0;--
這樣的話語句變成
select * from user where uid='' or 1 > 0;--' and pwd='網頁提交的密碼'
這樣你看,uid為空,不滿足,但是後面有個or並且是恆成立的1>0,所以條件永遠成立,所以就登陸上了。其它的也類似,你可以在查詢頁面通過這種方法查詢所有數據,刪除數據等操作。

❺ sql注入是破壞用戶資料庫的數據嗎

SQL注入一般是利用web輸入框如查詢關鍵字的程序漏洞,在關鍵詞中加入SQL語句實現越權執行資料庫SQL。SQL注入有可能導致用戶資料庫的數據被篡改,也有可能導致用戶數據泄露,甚至可能利用資料庫漏洞獲取操作系統的賬號許可權,破壞操作系統安全。

❻ 網站被黑,sql資料庫被篡改,在線求助,急等

資料庫被改了那就沒辦法了,只能找找有沒有之前的資料庫備份,把數據恢復過來

❼ sql2000的sa密碼每天重啟電腦都被篡改!改的時候2812錯誤!2812錯誤我知道怎麼解決!

中病毒sa密碼被篡改然後刪除修改密碼的存儲過程,你查詢下sp_password是不是不存在了,你可以先備份資料庫(為了避免數據丟失),然後新建改存儲過程(見下面代碼)。修改為SA密碼後,查殺下病毒,實在不行重裝系統,重新附加資料庫或者用備份還原

--SQL代碼開始
sp_configure'allowupdates',1
RECONFIGUREWITHOVERRIDE
go
usemaster
go
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[sp_password]')andOBJECTPROPERTY(id,N'IsProcere')=1)
dropprocere[dbo].[sp_password]
go
createproceresp_password
@oldsysname=NULL,--theold(current)password
@newsysname,--thenewpassword
@loginamesysname=NULL--usertochangepasswordon
as
--SETUPRUNTIMEOPTIONS/DECLAREVARIABLES--
setnocounton
declare@selfint
select@self=CASEWHEN@loginameisnullTHEN1ELSE2END
--RESOLVELOGINNAME
if@loginameisnull
select@loginame=suser_sname()
--CHECKPERMISSIONS()--
IF(notis_srvrolemember('securityadmin')=1)
ANDnot@self=1
begin
dbccauditevent(107,@self,0,@loginame,NULL,NULL,NULL)
raiserror(15210,-1,-1)
return(1)
end
ELSE
begin
dbccauditevent(107,@self,1,@loginame,NULL,NULL,NULL)
end
--DISALLOWUSERTRANSACTION--
setimplicit_transactionsoff
IF(@@trancount>0)
begin
raiserror(15002,-1,-1,'sp_password')
return(1)
end
--RESOLVELOGINNAME(disallowsntnames)
ifnotexists(select*frommaster.dbo.sysloginswhere
loginname=@loginameandisntname=0)
begin
raiserror(15007,-1,-1,@loginame)
return(1)
end
--IFnon-,REQUIREPASSWORD(218078)--
if(@self<>1ANDis_srvrolemember('sysadmin')=0ANDexists
(SELECT*FROMmaster.dbo.sysloginsWHEREloginname=@loginameandisntname=0
ANDsysadmin=1))
SELECT@self=1
--CHECKOLDPASSWORDIFNEEDED--
if(@self=1or@oldisnotnull)
ifnotexists(select*frommaster.dbo.sysxlogins
wheresrvidISNULLand
name=@loginameand
((@oldisnullandpasswordisnull)or
(pwdcompare(@old,password,(CASEWHENxstatus&2048=2048THEN1ELSE0END))=1)))
begin
raiserror(15211,-1,-1)
return(1)
end
--CHANGETHEPASSWORD--
updatemaster.dbo.sysxlogins
setpassword=convert(varbinary(256),pwdencrypt(@new)),xdate2=getdate(),xstatus=xstatus&(~2048)
wherename=@loginameandsrvidISNULL
--,TOINDICATESYSLOGINSCHANGE--
exec('usemastergrantalltonull')
--FINALIZATION:RETURNSUCCESS/FAILURE--
if@@error<>0
return(1)
raiserror(15478,-1,-1)
return(0)--sp_password
GO
sp_configure'allowupdates',0
RECONFIGUREWITHOVERRIDE
--SQL代碼結束

❽ SQL注入式攻擊的危害

資料庫信息泄露:數據中存放的用戶的隱私信息的泄露;
網頁篡改:通過操作資料庫對特定網頁進行篡改;
資料庫被惡意操作:資料庫伺服器被攻擊,資料庫的系統管理員賬戶被篡改;
伺服器被遠程式控制制,被安裝後門;
刪除和修改資料庫表信息。

熱點內容
uz畫圖編程 發布:2025-01-15 16:32:44 瀏覽:882
ppt怎麼解壓 發布:2025-01-15 16:14:58 瀏覽:849
伺服器地址配置規則 發布:2025-01-15 16:03:45 瀏覽:987
冰箱加氟後壓縮機發燙 發布:2025-01-15 16:03:00 瀏覽:834
文件輸入輸出java 發布:2025-01-15 15:54:54 瀏覽:164
手游製作腳本 發布:2025-01-15 15:34:40 瀏覽:757
java編譯異常運行異常 發布:2025-01-15 15:34:02 瀏覽:506
ipadid密碼是什麼 發布:2025-01-15 15:14:55 瀏覽:508
怎麼更改下載存儲位置 發布:2025-01-15 15:00:28 瀏覽:845
sql月最後一天 發布:2025-01-15 14:59:45 瀏覽:38