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