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/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

发表回复

登录后才能评论