999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

追根溯源 防范SQL注入攻擊

2019-12-22 15:37:52河南劉建臣
網絡安全和信息化 2019年8期
關鍵詞:頁面數據庫

■ 河南 劉建臣

編者按:對于目前的網絡安全形式來說,跨站腳本攻擊是黑客最常用的攻擊方式之一。當然,和SQL調用相關的安全隱患同樣不可忽視,這其實就是大家很熟悉的SQL注入問題。雖說現在網站管理者的安全意識不斷提高,但是還有相當數量的網站存在SQL注入漏洞,這給黑客帶來了可乘之機。因此,對SQL調用進行嚴格的管理,對于提高網站安全性是極為重要的。

SQL注入攻擊的危害

對于SQL注入漏洞來說,主要是因為SQL語句調用方法不當所產生的安全隱患。如果在網站程序中存在該漏洞,就會招致黑客直接對服務器進行主動攻擊,導致數據庫中的信息被竊取或被惡意篡改、讓登錄認證形同虛設、對服務器上的文件進行非法讀取或修改、隨意執行服務器程序等不良后果。

可以說只要是調用SQL語句的位置,都可能存在注入漏洞,其可能影響到所有的頁面。

洞察黑客不法伎倆

兵法云,知己知彼百戰不殆,只有對黑客的注入手法充分了解,才可以有針對性的采取防御措施。

下面就針對實際的例子,對黑客的攻擊手法進行抽絲剝繭的分析。例如對于某在線圖書銷售網站來說,在其PHP網頁開發語言中存在“$con = " pg_connect("host=localhost dbname=newdb user=postgres password=xxx")"”語句,連接后臺的PostgreSQL數據庫,使用“postgres”超級管理員,“xxx”為該賬戶密碼。

在后臺Ubuntu系統中執行“su - postgres”命令,切換到“postgres”賬戶環境,執行“psql”命令,在提示符下執行“c newdb;”命令連接到數據庫,在其中可以查詢各種表的內容。在網站的查詢頁面中輸入作者的名稱,可以查詢到相關的書籍。在查詢頁面中存在“$sql= "SELECT * FROM Books WHERE uname ='$uname'ORDER BY id"”之類的語句,執行搜索后,將符合條件的內容顯示出來。

但是,這卻存在很嚴重的安全問題。如果黑客在地址欄的提交語句后面添加某些內容,發起注入攻擊,雖然該語句會出現執行錯誤的提示,但會讓黑客非法查詢到數據庫中的用戶表的內容,將敏感賬戶名稱和密碼顯示出來,用戶表中的信息用于網站認證之用。

該非法注入語句中有“'”符號,實現了針對原查詢語句的閉合作用,并使用后面的“and”語句連接非法的查詢語句。而查詢語句針對用戶表中的賬戶ID和密碼進行搜索,并將兩者連接在一起返回,并故意使用轉換函數進行錯誤操作,讓網頁出現報錯提示,這樣在頁面上就會顯示非法查詢的內容了。

當然,狡猾的黑客為避開禁止顯示錯誤信息的限制,會使用聯合查詢方式進行滲透。例如其可以將上述非法查詢語句進行修改,直接將當前的表和用戶表的相關內容拼接在一起顯示。

在網站的登錄界面,要求輸入正確的賬戶名和密碼才可以通過認證。在認證頁面中存在諸如“

”的語句,將輸入的賬戶名和密碼提交給指定的PHP文件進行認證處理。在“Authention.php"”中 存 在“$id = @_POST['ID']”,“$pwd = @_POST['PWD']”語句來獲取傳遞過來的信息。利用相關語句,從用戶表中查詢該賬戶是否有效。這看起似乎沒有問題,其實存在很大的安全隱患。

例如,黑客可以在認證頁面中輸入任何賬戶名,在密碼欄中輸入特殊格式字符串,就可以繞開認證文件,這是因為在上述SQL語句的尾部添加了特殊字符串,讓Where語句始終處于成立狀態的緣故。因此說,只要登錄頁面存在SQL注入漏洞,就可能讓密碼輸入形同虛設。利用SQL注入攻擊,黑客不僅可以非法查看數據,繞開認證環節,甚至可以對數據進行非法修改。

實際上,不同網站采用的數據庫引擎是不同的,黑客會有針對性的采取不同手法的SQL注入攻擊,來達到諸如執行系統命令、讀取文件、編輯文件、利用HTTP請求攻擊別的服務器等目的。

SQL注入攻擊的根源

根據以上分析,可以看到SQL注入攻擊之所以可以實現,在很大程度上是因為字面量的原因,黑客通過開發者意想不到的方式(例如單引號閉合、聯合查詢、利用分號執行下一語句等)來改變SQL語句的構造,實現對網站的攻擊行為。

所謂字面量,指的是SQL語句中的固定值,SQL語句中的每種數據類型都用對應的字面量,最常用是字符串和數值字面量。

對于SQL標準規格來說,字符串字面量必須以單引號括起來,如果要在字符串字面量內使用單引號,就需要使用連續兩個單引號來表示,這被稱為單引號轉義。

例 如 將“C'Apple”用于SQL字符串字面量時必須更改為“C''Apple”。但是在存在SQL注入漏洞的程序中,由于沒有轉義單引號,就會導致出諸如“select * from tb1 where name='C'Apply'”之類的語句。導致“'C'Apply'”字符串中間的單引號造成閉合現象,后面的“Apply'”被排斥在字符串字面量之外,造成該部分沒有任何意義,不可避免的會產生語法錯誤。

但是,如果將上述“Apply'”替換為有意義的SQL語句,就會導致SQL注入攻擊的發生,這才是SQL攻擊之所以存在的根本原因。

因為在SQL注入攻擊中,對于被插入的單引號排除出的字符串來說,其實是有意義的SQL語句,就會被應用程序調用而觸發特定的操作(例如篡改數據等)。

因此,無論SQL注入攻擊如何厲害,只要其被解釋為字面量就沒有任何問題,反之就會就會讓黑客攻擊得手。

除了針對字符串字面量的攻擊外,數值字面量也會遭到SQL注入攻擊的威脅。在網頁程序中,經常會使用到ASP、PHP等動態類型語言,其特點是不會限制變量的類型。這就會導致應該輸入數值的位置可能會被輸入其他類型的字符的情況,就會形成SQL注入攻擊。

例 如 對 于“select *from employee where age< $age”語句來說,如果將“15;delete from tb1” 這一字符串傳進來,就會被錯誤執行造成數據被刪除的問題。

因為數字字面量沒有被單引號括起來,所以當出現非數值的字符串時,就會被視為數字字面量終止,上述傳入的字符串中的分號之后的內容就被排除在數值字面量之外,被解釋為SQL語句的一部分。

因此,產生SQL注入漏洞的根本原因,是在于被指定為參數的字符串的一部分被排除在字面量之外,從而造成SQL語句發生了變化的緣故。

解決SQL注入的根本策略

根據以上分析,要想有效防御SQL注入漏洞,必須防止SQL語句在拼接過程中被惡意更改。

解決的方法包括使用占位符(Place Holder)拼接SQL語句,以及在應用程序拼接SQL語句時,確保字面量被正確處理,保證SQL語句不被惡意更改。SQL語句中的問號就是占位符,表示將變量或者表達式等可變參數填到此處。對于實際的安全防御中,最常用的是前一種方式。

例如對于上述網站來說,可以在網頁中對語句進行修改,將其變為:“$uname = $_GET['uname'];

$m d b 2 = M D B 2::connect('pgsq l://bookuser:bookuser@localhost/bookdb?charset=utf8');

$sql = "SELECT * FROM books WHERE uname = ?ORDER BY id"

$stmt = $mdb2 ->prepare($s q l,array('text'));

rs = $stmt->execute(array($uname));

不再使用權限極大的數據庫管理員賬戶,改用權限較小的賬戶來連接數據庫,當然該賬戶擁有對該數據庫的合理訪問權限。

在上述語句中使用了“?”占 位 符,在 使 用“execute”方法調用時,指定了實際的參數值和類型(這里為“text”類型),將值分配給給占位符這一操作被稱為綁定變量。

這里的“array('text')”表示占位符中的實際數 據。“rs = $stmt->execute(array($author));”語句表示提取用戶填入的的數據到變量中。通過占位符,讓數據庫按照指定的格式來進行預先編譯,得到執行的數據結構,該結構是不可改變的。然后等待需要傳入的實際數據,最后執行實際的語句,得到執行結果數據。

綜上所述,靜態占位符綁定變量的操作在數據庫引擎中執行,包含占位符的語句被直接發送給數據庫引擎,數據庫引擎對其進行編譯后確定SQL語句結構,隨后綁定的數據被發送給數據庫引擎,數據庫引擎得到數據庫將其填入到SQL語句并執行。因為SQL語句是在包含占位符的狀態下被編譯的,所以其是不可再次被更改的。

除了使用靜態占位符防御SQL注入攻擊外,還可以使用動態占位符來應對威脅。

動態占位符的工作方式為先在處理SQL的程序庫中執行綁定變量操作,之后將SQL語句發送給數據庫引擎加以處理,在綁定變量時字面量會被正確處理,這可以有效防御SQL注入攻擊。

不管是靜態占位符,還是動態占位符,都可以有效消除SQL注入漏洞,兩者比較后可以發現,靜態占位符可以徹底解除SQL注入的威脅,所以應該盡可能在實際的工作中采用靜態占位符的方式。

除了使用靜態靜態占位符這一根本性的解決方式外,還可以使用一些輔助性的技術來防范SQL注入攻擊。如禁止頁面顯示錯誤信息,對輸入的數據進行校驗,設置合理的數據庫權限等。

例如,黑客會利用錯誤信息頁面來查看SQL注入攻擊后的得到的數據,為了避免顯示詳細的錯誤信息,可以在PHP配置文件中輸入“display_errors = off”行,關閉錯誤信息顯示功能,讓黑客無法通過錯誤頁面獲取敏感信息。

對用戶輸入的內容進行檢測,也可以有效避免SQL注入攻擊危害,如根據應用程序的規格檢驗輸入值,清除惡意輸入的數據等。

例如對于身份證來說,可以利 用“^d{15}|d{18}$”之類的正則表達式加以校驗。將Web應用數據庫的訪問權限進行合理的數值,例如不要使用權限很大的管理員賬戶,盡量使用最低權限的賬戶,這樣即使發生了SQL注入攻擊,也可以將損失降低到最小。

對于僅僅需要顯示普通信息的操作,只要開放對應數據表的讀取權限即可,而不要賦予其寫入權限,就可以避免數據被惡意篡改。

對數據庫管理員的權限進行適當的限制,可以避免黑客通過SQL注入攻擊來非法讀取文件,將其對系統的危害降到最低。

猜你喜歡
頁面數據庫
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
同一Word文檔 縱橫頁面并存
數據庫
財經(2010年20期)2010-10-19 01:48:32
主站蜘蛛池模板: 国产91av在线| a天堂视频| 国产免费人成视频网| 久久精品一品道久久精品| 国产成人久久综合一区| 麻豆国产在线观看一区二区| 欧美成人第一页| 欧美综合区自拍亚洲综合绿色| 中文字幕不卡免费高清视频| 国产女同自拍视频| 久久国产精品77777| 国产成人超碰无码| 朝桐光一区二区| 婷婷综合缴情亚洲五月伊| 97精品国产高清久久久久蜜芽| 欧美日本在线| 五月婷婷丁香综合| 无码精品福利一区二区三区| 日本成人精品视频| 国产精品三级专区| 亚洲av无码成人专区| 情侣午夜国产在线一区无码| 红杏AV在线无码| 天天综合天天综合| 青青草91视频| 日本在线视频免费| 国产久操视频| 国产福利免费在线观看| 天堂va亚洲va欧美va国产| 国产精品自拍露脸视频| 亚洲AV无码久久天堂| 伊人蕉久影院| 黄色三级毛片网站| 国产自产视频一区二区三区| 91热爆在线| 亚洲天堂2014| 92午夜福利影院一区二区三区| 国产毛片基地| 亚洲国产欧美中日韩成人综合视频| 爱色欧美亚洲综合图区| 一级爱做片免费观看久久| 91精品啪在线观看国产60岁| 国产成人91精品| 亚洲综合色区在线播放2019| 国产黄色片在线看| 午夜视频日本| 国产成人午夜福利免费无码r| 国产国语一级毛片| 国产va在线观看| 国产精品大白天新婚身材| 亚洲一区色| 一本大道东京热无码av| 操国产美女| 亚洲第一视频网站| 69国产精品视频免费| 18黑白丝水手服自慰喷水网站| 伊人成人在线| a毛片在线免费观看| 中文字幕人妻无码系列第三区| 国产欧美综合在线观看第七页| 情侣午夜国产在线一区无码| 97se亚洲综合在线天天| 99爱在线| 欧美日韩一区二区在线免费观看| 国产无码在线调教| 久久91精品牛牛| 国产免费福利网站| 日本黄色a视频| 91精品亚洲| 国产xxxxx免费视频| 浮力影院国产第一页| AV不卡国产在线观看| 超碰免费91| 国产成人8x视频一区二区| 亚洲精品男人天堂| 超碰免费91| 成人在线观看一区| 久久亚洲高清国产| 日本亚洲成高清一区二区三区| 亚洲成网站| 华人在线亚洲欧美精品| 国产91九色在线播放|