網(wǎng)站安全之php防止注入攻擊代碼SQL攻擊(英語:SQL),簡(jiǎn)稱隱碼攻擊的原因php 防止sql注入
2022-12-24
SQL攻擊(英文:SQL),簡(jiǎn)稱隱藏代碼攻擊網(wǎng)站安全之php防止注入攻擊代碼,是一種發(fā)生在應(yīng)用程序數(shù)據(jù)庫層的安全漏洞。 簡(jiǎn)而言之,SQL 命令包含在輸入字符串中,而在設(shè)計(jì)不佳的程序中忽略檢查。 那么這些命令就會(huì)被數(shù)據(jù)庫服務(wù)器誤認(rèn)為是正常的SQL命令而執(zhí)行。 所以它被摧毀或入侵。
有人認(rèn)為SQL隱藏代碼攻擊只針對(duì)SQL,但只要是支持批量處理SQL命令的數(shù)據(jù)庫服務(wù)器,都有可能被這種方法攻擊。
原因
如果應(yīng)用程序存在以下情況,則應(yīng)用程序可能會(huì)暴露于SQL的高危情況:
使用字符串連接在應(yīng)用程序中組合 SQL 命令。
應(yīng)用程序連接數(shù)據(jù)庫時(shí)使用權(quán)限過高的賬戶(例如很多開發(fā)者喜歡使用最高權(quán)限的系統(tǒng)管理員賬戶(如 root、sa等)連接數(shù)據(jù)庫)。
數(shù)據(jù)庫中暴露了不必要但過于強(qiáng)大的功能(SQL 數(shù)據(jù)庫中的擴(kuò)展存儲(chǔ)過程或 OLE 存儲(chǔ)過程等)
過于信任用戶輸入的數(shù)據(jù),不限制輸入的字符數(shù),不檢查用戶輸入的數(shù)據(jù)是否有潛在的命令。
作用原理
SQL命令可以查詢、插入、更新、刪除等網(wǎng)站建設(shè),以及一系列的命令。 分號(hào)字符是不同命令之間的區(qū)別。 (原函數(shù)是用于或作為查詢、插入、更新、刪除...等的條件表達(dá)式)
SQL 命令對(duì)傳入的字符串參數(shù)使用單引號(hào)字符。 (但在SQL數(shù)據(jù)庫中字符串中連續(xù)2個(gè)單引號(hào)字符被視為單引號(hào)字符)
SQL命令中可以包含注釋(兩個(gè)連續(xù)的減號(hào)——后面的文字是注釋,或者“/*”和“*/”括起來的文字是注釋)
因此,如果在組合SQL命令串時(shí)不替換單引號(hào)字符,在命令串中填充字符變量時(shí),原SQL語法就會(huì)被惡意篡改。
例子
某網(wǎng)站登錄驗(yàn)證SQL查詢代碼為
= " * FROM (name = '" + + "') and (pw = '"+ +"');"
惡意填充
=“1”或“1”=“1”;
和
=“1”或“1”=“1”;
, 將導(dǎo)致原始 SQL 字符串被填充為
= " * FROM (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
即實(shí)際運(yùn)行的SQL命令會(huì)變成如下
=“*來自;”
因此,無需賬戶密碼即可登錄網(wǎng)站。 因此,SQL隱藏代碼攻擊俗稱黑客的填空游戲。
可能的損壞
數(shù)據(jù)表信息泄露,如個(gè)人機(jī)密信息、賬戶信息、密碼等。
數(shù)據(jù)結(jié)構(gòu)被黑客檢測(cè)到,可以進(jìn)一步攻擊(如* FROM sys.)。
數(shù)據(jù)庫服務(wù)器被攻擊,系統(tǒng)管理員賬號(hào)被篡改(如sa WITH ='')。
獲得更高的系統(tǒng)權(quán)限后,可以在網(wǎng)頁中添加惡意鏈接、惡意代碼、XSS等。
數(shù)據(jù)庫服務(wù)器提供的操作系統(tǒng)支持允許黑客修改或控制操作系統(tǒng)(例如,“net stop”可以停止服務(wù)器的IIS服務(wù))。
破壞硬盤數(shù)據(jù),癱瘓整個(gè)系統(tǒng)(如“C:”??)。
避免的方法
在設(shè)計(jì)應(yīng)用程序時(shí),使用參數(shù)化查詢 ( ) 來設(shè)計(jì)數(shù)據(jù)訪問功能。
組合SQL字符串時(shí),首先對(duì)傳入的參數(shù)進(jìn)行字符替換(將單引號(hào)字符替換為連續(xù)的2個(gè)單引號(hào)字符)。
如果使用PHP開發(fā)網(wǎng)頁程序網(wǎng)站安全之php防止注入攻擊代碼,還可以啟用PHP的魔術(shù)引號(hào)()功能(自動(dòng)向所有網(wǎng)頁傳入?yún)?shù)網(wǎng)站建設(shè),將單引號(hào)字符替換為連續(xù)2個(gè)單引號(hào)字符)。
其他人,使用其他更安全的方式連接到 SQL 數(shù)據(jù)庫。 例如,數(shù)據(jù)庫連接組件,如 ASP.NET 對(duì)象或 LINQ to SQL,有固定的 SQL 數(shù)據(jù)隱藏代碼問題。
使用 SQL 注入預(yù)防系統(tǒng)。