360 php防注入代碼 慢查詢?nèi)罩静僮饔惺裁从??為什么要用它呢?php pdo 防注入
2022-01-03
起源
如果您查看過慢查詢?nèi)罩净蚓W(wǎng)站日志,您可能會看到以下語句:
col.id = ((0)from(((90)))v)/*'+((0)from(((90)) )v)+'"+((0)from(((90)))v)+"*/;
可能是你的網(wǎng)站開通后大約一個小時內(nèi)收到的日志,也可能是你訪問web服務(wù)器時看到的日志()。如果你在慢查詢?nèi)罩净蛘呷罩局锌吹剑⑶姨D(zhuǎn)請求返回的狀態(tài)碼是200而不是404,那么恭喜你,你可能中標(biāo)了,被Sql攻擊了。在本文中,我們將通過使用 () 函數(shù)作為干預(yù)來與您討論。
() 函數(shù)
(n),暫停數(shù)據(jù)庫n秒。
不要混淆控制臺中的狀態(tài)。它描述了連接的狀態(tài)。 () 函數(shù)做一件事,就是暫停數(shù)據(jù)庫的執(zhí)行網(wǎng)站開發(fā),直到設(shè)定的時間。那么這個操作有什么用呢?為什么要使用它?
通常,有些操作需要一段時間的操作,而這些操作需要臨時的操作或更新(比如數(shù)據(jù)鎖,比如記錄一個Pos點后,備份一個從庫),當(dāng)然也可能也是黑客攻擊。
漏洞滲透掃描
如果你的數(shù)據(jù)庫和網(wǎng)站沒有采取安全措施,直接將端口暴露在公網(wǎng)(如ssh 22端口、3306端口),那么掃描儀很快就能掃描滲透你的端口。因此,綜中意在主機保護中也提到了條款:禁止端口暴露于公網(wǎng);修改常用端口。具體來說,最常用的掃描滲透和安全審計工具是。
是使用它編寫的數(shù)據(jù)庫SQL注入掃描工具。目前支持,,,,,,,,,,,,,,,,,,,,,,,,,,2等常見的數(shù)據(jù)安全漏洞(sql注入)
在盲主掃描中,通常會用到各種sql語句,通常會用到命令。例如360 php防注入代碼,掃描那些使用舊的或非 PDO 連接的 PHP 網(wǎng)站,然后枚舉易受攻擊的 AJAX 命令或 GET/POST 結(jié)果的列表。通常需要在輸出掃描結(jié)果時停止執(zhí)行。
而類似的工具可以并行攻擊數(shù)十個站點,通過強制這些站點上的數(shù)據(jù)庫一段時間(數(shù)量設(shè)置取決于個人經(jīng)驗),并計算時間來測試滲透命令的有效性。這是在安全行業(yè)。通常稱為基于時間的盲注。
快速剖析
本文開頭我們舉了一個sql語句的例子,是常用的盲注的典型語句。如果語句被執(zhí)行,條件語句部分被替換成類似下面的內(nèi)容,那么它絕對會鎖定數(shù)據(jù)庫:
col.id = ((0)from(((90)))v)/*'+((0)from(((90)) )v)+'"+((0)from(((90)))v)+"*/;
請注意,該語句巧妙地使用了各種運算符和分隔符。請注意,此語句對于僅拼寫 sql 語句的程序很有用。使用PDO,語句可以過濾,不能執(zhí)行。
PHP 注入示例
讓我們寫一個php例子來解釋這個問題??聪旅娴暮瘮?shù):
在上面的例子中,我們使用了 () 函數(shù)來生成一個逗號分隔的 ID 列表。由于沒有對輸入進(jìn)行校驗,可能傳入數(shù)組中存在非法命令或?qū)?shù)據(jù)庫表中的數(shù)據(jù)轉(zhuǎn)儲到顯示頁面。解決這個問題,需要對傳入的數(shù)據(jù)進(jìn)行校驗,并校驗長度(根據(jù)實際需要限制參數(shù)長度,可以大大防止注入成功)。
可以使用PDO等鏈接框架,使用占位符替換(綁定)參數(shù)生成SQL語句,并通過參數(shù)驗證,可以防止大部分SQL注入值。
PDO 不是萬能藥
上面我們也說了PDO可以防止大部分PHP Sql注入問題,但不能100%保證解決所有問題。
前面說過,把Sql獨創(chuàng)的動態(tài)組合方式放在一起,讓很多PHP系統(tǒng)都處于危險之中
所以,不知所措的程序員難免會通過谷歌尋求幫助:
以上是網(wǎng)上非常流行的PDO教程之一。代碼使用了PDO,但與Sql的純手工拼湊無異。這也是一種非常危險的做法。
下面也有答案(某知名編程問答網(wǎng)站):
你看到了嗎?這是糟糕的代碼網(wǎng)站開發(fā),但它仍然被接受。編碼者接受的概念是“使用PDO防止sql注入”,但是他們不知道PDO還有一個防止注入的前提,那就是必須用“?占位符綁定來寫SQL,然后,然后”,否則沒用。
不要低估()
也許你覺得()的執(zhí)行沒有什么問題?至少不要刪除你的數(shù)據(jù)庫。 () 易于識別,通常在此階段危害不大。但是通過盲注Fuzz測試數(shù)據(jù),可以執(zhí)行大量查詢,快速找到有效的攻擊EXP。
其實這就是死核函數(shù)。這種想法的一個問題是,在依賴于 UX/UI 的生產(chǎn) Web 項目中,通常的做法是將代碼執(zhí)行用戶限制為只有權(quán)限,而不是給他 DROP 權(quán)限。但是()只需要權(quán)限就可以使用。
如何禁止?
因為只需要使用功能,所以不需要權(quán)限。并且可以作為“最安全”的命令執(zhí)行。
這只是一個SQL注入漏洞,您不能使用定時攻擊來暫停數(shù)據(jù)庫執(zhí)行或瀏覽數(shù)據(jù)(或轉(zhuǎn)儲)。而且一般情況下,不能通過簡單的配置來禁用功能。您可以在數(shù)據(jù)庫、表和列級別限制權(quán)限。當(dāng)然,如果有辦法簡單地禁止某些危險功能,也是有道理的(比如php.ini中的配置)。
其實也給了我們一個防御思路,基于對關(guān)鍵字的檢測來實現(xiàn)SQL攻擊預(yù)警和防御。例如,基于此檢測原理開發(fā)了 Web 防火墻 App-Waf(://App-Waf)。通過分析訪問日志中的關(guān)鍵字360 php防注入代碼,它包括功能。以下是我使用的關(guān)鍵字。規(guī)則(部分)。
本文中bug和大家用()函數(shù)作為介入來討論Sql注入的問題。一般來說,可以使用()來枚舉SQL漏洞。 PDO綁定參數(shù)的方法可以防止Sql注入。 ( ) 一般無害,一般情況下也很少使用,但可以變身寶物,作為檢測攻擊的手段。
更多安全和Sql注入問題,關(guān)注bug,bug會寫文章和大家一起學(xué)習(xí)。