php的sql漏洞修復(php常見漏洞)

本文目錄一覽:

php漏洞怎麼修復

近日,我們SINE安全對metinfo進行網站安全檢測發現,metinfo米拓建站系統存在高危的sql注入漏洞,攻擊者可以利用該漏洞對網站的代碼進行sql注入攻擊,偽造惡意的sql非法語句,對網站的數據庫,以及後端服務器進行攻擊,該metinfo漏洞影響版本較為廣泛,metinfo6.1.0版本,metinfo 6.1.3版本,metinfo 6.2.0都會受到該網站漏洞的攻擊。

metinfo建站系統使用的PHP語言開發,數據庫採用的是mysql架構開發的,在整體的網站使用過程中,簡單易操作,可視化的對網站外觀進行設計,第三方API接口豐富,模板文件較多,深受企業網站的青睞,建站成本較低可以一鍵搭建網站,目前國內使用metinfo建站的網站數量較多,該metinfo漏洞會使大部分的網站受到攻擊影響,嚴重的網站首頁被篡改,跳轉到其他網站,以及網站被劫持跳轉到惡意網站上,包括網站被掛馬,快照被劫持等情況都會發生。

關於該metinfo漏洞的分析,我們來看下漏洞產生的原因:

該漏洞產生在member會員文件夾下的basic.php代碼文件:

metinfo獨有的設計風格,使用了MVC框架進行設計,該漏洞的主要點在於使用了auth類的調用方式,在解碼加密過程的算法中出現了問題,我們再來看下代碼:

通常加密,以及解密的算法是不可以可逆的,但是metinfo寫的代碼可以進行偽造函數值進行逆算,我們看這個構造的惡意函數,這裡的key值是從前端met_webkeys值里進行獲取,將獲取到的webkeys值進行寫入,並賦值到配置文件里,config目錄下的config_safe.php代碼里。我們通過查看這個代碼,發現寫入的值沒有辦法進行PHP腳本的執行,本來以為可是偽造key值進行寫入木馬,發現行不通,但是在這個偽造key值的過程可以進行sql注入攻擊,採用是延時注入方式進行

關於metinfo漏洞的修復建議,以及安全方案

目前metinfo最新版本發佈是2019年3月28日,6.2.0版本,官方並沒有針對此sql注入漏洞進行修復,建議網站的運營者對網站的後台地址進行更改,管理員的賬號密碼進行更改,更改為數字+字符+大小寫的12位以上的組合方式,對網站的配置文件目錄進行安全限制,去掉PHP腳本執行權限,如果自己對代碼不是太熟悉,建議找專業的網站安全公司來處理修復漏洞,國內SINE安全,以及綠盟,啟明星辰,都是比較不錯的網站漏洞修復公司。

PHP的SQL漏洞修復!【中危漏洞】SQL_Injection_Vulnerability【編號:3303280】

攻擊方法就在:

request:{“body”:”ClassID=1+and%281%3D1%29″,”header”:”POST /m/dianhua.asp HTTP 1.1

Content-Length: 24

/m/dianhua.asp這裡,即你要修復的位置。

如何修復SQL注入漏洞

以下是OMG我為大家收集整理的文章,希望對大家有所幫助。

SQL注入是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。其實就是就是提交精心構造的數據庫語句,使其反饋一些有用的數據。說白了就是去欺騙數據庫,假如只有web服務器的話,是沒法進行SQL注入的。

網上常用的注入手法有兩種,一種是猜測,讓數據庫暴出用戶名、密碼等信息;另一種直接繞過認證,取得權限。相對應,要想修復此類漏洞,就必須禁止特殊數據的提交或將特殊提交的數據修改。

下面是不同腳本語言下的防注入過濾代碼,其實思想是一致的。

1、 PHP防注入過濾代碼

php 代碼複製內容到剪貼板

!– ?php

/*************************

說明: 判斷傳遞的變量中是否含有非法字符 如$_POST、$_GET

功能: 防注入

使用方法: 將下列代碼保存為ak,php,調用方式 在數據提交頁加上include(“ak.php”);

**************************/

function dowith_sql($str)

//實現將特徵碼兩邊加.

{

$refuse_str=”exec|and|or|select|update|from|where|order|by|*|delete||insert|into|values|create|table|

database|set|char|asc|cast|declare| /script|script|iframe|3bomb|c.js|;”;

//定義防注入的字符

$arr=explode(“|”,$refuse_str);

//將$refuse_str中的值單獨取出

for($i=0;$icount($arr);$i++) p=”” /count($arr);$i++)

{

$replace=”[“.$arr[$i].”]”;

$str=str_replace($arr[$i],$replace,$str);

//在變量$str中搜索字符串$arr[$i],並將其替換為字符串[$replace]

}

return $str;

}

foreach ($_GET as $key=$value)

//遍歷獲GET方法獲得的參數$_GET的值傳給$key,並賦值給$value

{

$_GET[$key]=dowith_sql($value);

//將$value中的特徵碼處理傳個$_GET[$key]

}

foreach ($_POST as $key=$value)

{

$_POST[$key]=dowith_sql($value);

}

?

上面的防注入的方法只是防了GET與POST方法提交的數據,但是,WEB服務器讀取數據的順序是,先取GET中的數據,沒有再去POST中的數據,沒有還會再去COOKIES中的數據,上面的代碼還沒有防cookies注入。防cookies注入就比較簡單了,cookies的id值一般只為阿拉伯數字,但是cookies注入必須得在id中構造代碼,只要在獲得參數UID後,對其進行過濾就可以了,代碼如下:

php 代碼複製內容到剪貼板

!– ?php

if($_COOKIE[id]!=null) {

//判斷cookies不為空

foreach ($_COOKIE[id] as $key=$id){

//讀取cookies中的值

if (is_numeric($id)0){

echo ” “;

}

}

?

將上述代碼保存為hk.php。

所以在平時應用時,在網頁上加上include(“ak.php”);與include(“hk.php”);

2、 ASP防注入過濾代碼

%

——–說明——————

使用方法: 在需要防注的頁面頭部用 SSI ʱ B

包含就可以了

友情提示:把代碼複製到CONN.asp(數據庫連接文件) 那麼,只要包含了CONN的所有文件都防注了

——– ————————

Dim xf_Post,xf_Get,xf_In,xf_Inf,xf_Xh,xf_db,xf_dbstr

自定義需要過濾的字串,用 “|” 分隔

xf_In = “|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare”

xf_Inf = split(xf_In,”|”)

If Request.Form”” Then

For Each xf_Post In Request.Form

For xf_Xh=0 To Ubound(xf_Inf)

If Instr(LCase(Request.Form(xf_Post)),xf_Inf(xf_Xh))0 Then

Response.Write “”

Response.Write “非法操作!系統做了如下記錄↓

Response.Write “操作IP:”Request.ServerVariables(“REMOTE_ADDR”)”

Response.Write “操作時間:”Now”

Response.Write “操作頁面:”Request.ServerVariables(“URL”)”

Response.Write “提交方式:POST

Response.Write “提交參數:”xf_Post”

Response.Write “提交數據:”Request.Form(xf_Post)

Response.End

End If

Next

Next

End If

If Request.QueryString”” Then

For Each xf_Get In Request.QueryString

For xf_Xh=0 To Ubound(xf_Inf)

If Instr(LCase(Request.QueryString(xf_Get)),xf_Inf(xf_Xh))0 Then

Response.Write “”

Response.Write “非法操作!系統已經給你做了如下記錄↓

Response.Write “操作IP:”Request.ServerVariables(“REMOTE_ADDR”)”

Response.Write “操作時間:”Now”

Response.Write “操作頁面:”Request.ServerVariables(“URL”)”

Response.Write “提交方式:GET

Response.Write “提交參數:”xf_Get”

Response.Write “提交數據:”Request.QueryString(xf_Get)

Response.End

End If

Next

Next

End If

%

同樣,再將cookies防一下,代碼加在數據提交頁。

if(Request.Cookies[“uid”]!=null)

{

uid=Request.Cookies[“uid”].value;

isnumeric cooidesID = new isnumeric();

//這是一個類

if (cooidesID.reIsnumeric(ruid))

//如果是數字就運行下面的

{

string str=”select * from userTable where id=”+uid;

}

}

3、 JSP防注入過濾代碼

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/240678.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:24
下一篇 2024-12-12 12:24

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用SQL實現select 聚合查詢結果前加序號

    select語句是數據庫中最基礎的命令之一,用於從一個或多個表中檢索數據。常見的聚合函數有:count、sum、avg等。有時候我們需要在查詢結果的前面加上序號,可以使用以下兩種方…

    編程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • SQL預研

    SQL預研是指在進行SQL相關操作前,通過數據分析和理解,確定操作的方法和步驟,從而避免不必要的錯誤和問題。以下從多個角度進行詳細闡述。 一、數據分析 數據分析是SQL預研的第一步…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901解析

    本文將對Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901進行詳細解析,並提供相關代碼示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Python漏洞挖掘全指南

    本文將從多個方面詳細闡述Python漏洞挖掘的相關知識,幫助開發工程師了解並掌握漏洞挖掘的基礎知識和實戰技巧。 一、漏洞類型 漏洞是指誤用或設計上的錯誤,可導致產品、應用或系統中存…

    編程 2025-04-27

發表回復

登錄後才能評論