SQL注入防御之二——注入关键词过滤(PHP)

SQL注入--安全(二) 写在前面:在前两天初学SQL注入的基础上,继续在Metasploitable-Linux环境下进行练习。 前面学习的SQL注入,那么当然就有防注入。由于web注入危害较大,各种防御技术也层出不穷。 1、程序猿在写代码时会有意识的进行防御设置,或者安全测试来封堵web注入 2、各大安全厂商生产的硬件或者软件WAF产品 黑名单过滤技术 1、过滤sql关键字段 常见的关键字:and、or、union a... 阅读详情

SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

概述

  欢迎来到本人的SQL注入防御系列的第二篇文章,上一篇文章我们讲到了伪静态的技术来防止SQL注入,但是正如我们总结的,不能完全依赖于伪静态就能达到防止SQL注入的目的,因为伪静态,主要是为了隐藏传递的参数名,伪静态只是一种URL重写的手段,既然能接受参数输入,所以并不能完全防止注入。相信来到这里,聪明的你一定有下面的疑问,那么有没有一种方法来阻止接受参数的输入呢?只要阻止恶意SQL语句的输入不就达到防止SQL注入的目的吗?没错,这一篇文章正是介绍如何通过过滤关键的SQL语句的关键词来达到阻止SQL注入的目的。

准备

  既然要实现黑名单策略,我们第一步当然先来分析一下到底过滤哪些关键词。SQL语句对于数据库的操作离不开“增删改查”和“文件处理”,那么它们分别有哪些关键词呢?

  • 基本关键词: and、or、order
  • 增的关键词: insert、into
  • 删的关键词: delete
  • 改的关键词: replace、update
  • 查的关键词: union、select、
  • 文件处理的关键词: load_file、outfile

 好了,关键词都列出来了,是否就可以直接到下一步呢?不不不,这还不算严谨,仔细想想查字段的时候一般SQL语句除了关键词还有什么呢?没错,符号我们也要把它们都过滤掉。而其实PHP本身在配置文件当中有一个设置项magic_quotes_gpc是关于过滤符号的,单引号、双引号、反斜杠 \和空字符都会被转义。 不magic_quotes_gpc在PHP5.3就已经被废弃,从PHP5.4开始就已经被移除了,如果使用PHP最新版本可以不用担心这个问题。

分析

主要代码:

/** 
* 过滤sql与php文件操作的关键字 
* @param string $string 
* @return string 
*/ 
private function filter_keyword( $string ) { 
$keyword = 'select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|and|union|order|or|into|load_file|outfile'; 
$arr = explode( '|', $keyword ); 
$result = str_ireplace( $arr, '', $string ); 
return $result; 
} 

/** 
* 检查输入的数字是否合法,合法返回对应id,否则返回false 
* @param integer $id 
* @return mixed 
*/ 
protected function check_id( $id ) { 
$result = false; 
if ( $id !== '' && !is_null( $id ) ) { 
$var = $this->filter_keyword( $id ); // 过滤sql与php文件操作的关键字 
if ( $var !== '' && !is_null( $var ) && is_numeric( $var ) ) { 
$result = intval( $var ); 
} 
} 
return $result; 
} 

/** 
* 检查输入的字符是否合法,合法返回对应id,否则返回false 
* @param string $string 
* @return mixed 
*/ 
protected function check_str( $string ) { 
$result = false; 
$var = $this->filter_keyword( $string ); // 过滤sql与php文件操作的关键字 
if ( !empty( $var ) ) { 
if ( !get_magic_quotes_gpc() ) { // 判断magic_quotes_gpc是否为打开 
$var = addslashes( $string ); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 
} 
//$var = str_replace( "_", "\_", $var ); // 把 '_'过滤掉 
$var = str_replace( "%", "\%", $var ); // 把 '%'过滤掉 
$var = nl2br( $var ); // 回车转换 
$var = htmlspecialchars( $var ); // html标记转换 
$result = $var; 
} 
return $result; 
} 

总结:

 值得注意的是,我们以上的代码只是起到一个抛砖引玉的作用,这只是很基本的过滤关键词方法,正则过滤还能更进一步的优化,因为过滤完整的SQL语句关键词是远远不够的,SQL注入灵活性强,不但能GET注入、POST注入,还能COOKIE中转注入,除此之外,还能利用PHP的注释来打碎关键词重组,如早期绕过强悍的安全狗保护d的绕过策略“S/**/E/**/L/**/E/**/C/**/T”,所以说关键词过滤的正则规则优化空间还很大。还有符号的过滤也不完全依赖magic quotes gpc设置项,因为在GBK的网页语言编码下,利用宽字符的特点也能绕过符号的过滤。

从CTF实战解析SQL注入:过滤绕过与堆叠注入攻防 SQL注入作为Web安全领域的核心漏洞类型,其本质是攻击者通过构造恶意输入,使应用程序将用户数据误解析为SQL代码执行。防御原理主要围绕输入验证、参数化查询和最小权限原则展开。在工程实践中,基于黑名单的过滤机制常因覆盖不全和上下文无关而失效,攻击者可利用双写、大小写、编码绕过或冷门命令突破。例如,当常见关键字如union、select被过滤时,堆叠注入技术允许通过分号分隔执行多条SQL语句,而MySQL的HANDLER命令则能绕过SELECT限制直接读取表数据。这类技术在CTF竞赛和渗透测试中具有重要价值, 阅读详情

相关推荐

一文看懂 SQL 注入:从漏洞成因到正则防御完整流程 | 进阶01

本文以 SQLi-Labs Less1 为案例,完整拆解 SQL 注入形成根源、联合查询注入完整攻击链路,重点剖析 PHP preg_match 正则过滤防御的底层缺陷。结合 NFA 有限状态机特性,复现超长字符串触发匹配超时绕过拦截的漏洞,对比预编译、白名单等多层防护方案,理清攻防底层逻辑,适合代码审计与安全开发人员阅读。

sbjdhjd的博客 514

如何避免SQL注入

SQL注入原理不做解释了,大家都知道 危害嘛: -- 本来我只想获取id=2的数据 SELECT id,NAME FROM area WHERE id = -- 正常的参数 2 -- 后面是sql注入追加的参数 or 1 = 1 UNION SELECT -- 前面有几列数据,你后面联表查询也必须有相同数量列的数据才可以执行成功 1,-- 数据库版本 version() UNION SELECT 1,-- 数据库 DATABASE () UNION SELECT 1, --

木易三水良 1199

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

php过滤sql关键字,PHP_详解WordPress开发中过滤属性以及Sql语句的函数使用,esc_attr()(过滤属性) 一般在 - phpStudy...

详解WordPress开发中过滤属性以及Sql语句的函数使用esc_attr()(过滤属性)一般在写 Html 代码的标签属性的时候会是下边的格式:那如果 value 属性是动态输出的呢?但是,如果动态输出的属性里有双引号、尖括号等特殊字符,Html 代码就会被打乱,这时就可以使用 esc_attr() 函数对输出的属性进行转义。使用方法esc_attr( $text );参数$text (字符串...

weixin_28860509的博客 524

Aruba无线控制器实战:如何用Client Match优化企业办公区漫游(附SNR调优技巧)

本文深入解析了如何利用Aruba无线控制器的Client Match功能优化企业办公区无线漫游体验。通过实战配置,详细阐述了基于SNR(信噪比)的精细化调优策略,包括阈值设定、负载均衡与场景化参数调整,旨在解决终端粘滞、乒乓漫游等问题,实现智能、平滑的无缝漫游。

weixin_28318011的博客 230

LabVIEW数据采集-数字I/O/计数器

labview 数据采集 数字I/O 计数器

weixin_43781045的博客 5617

php_bugs_04_sql注入关键字过滤绕过——一次失败审计

php_bugs 04

admin_mds的博客 739

【UE5】【蓝图】 LevelSequence 动画播放与暂停

最近有些工作,在研究UE5 蓝图的LevelSequence,来制作一些简单动画。做个笔记,记录一下动画更换绑定actor的操作,以及动画播放后如何暂停和继续。

UE5开发备忘录 1万+

php正则过滤sql关键字,使用正则表达式屏蔽关键字的方法

【问题】关键字屏蔽是社交类软件必做的功能,当然了,一般来讲都是产品的中后期来做;不同产品规定不一样,跟着产品运营走,可以的【方法】我们从技术的角度来看到这个问题,实现一个功能后者说实现一个需求,其方法是多种多样的,重点是找到适合我们当下产品的;比如:我们可以在后端进行数据处理之后,传递到前端;也可以在前端进行数据处理;这里我们要说的就是前端的JS处理方法,后端的php处理方法【JS方法】// 进行...

weixin_32058931的博客 535

从48V到800V:TI BMS芯片如何应对高压电池管理挑战?

电池管理系统是电动汽车和储能系统的核心,负责监控电池状态、保障安全并优化性能。其核心原理在于通过高精度测量电池电压、电流和温度,结合算法估算电池的荷电状态与健康状态,从而实现精准的能量管理与寿命预测。在技术价值层面,高精度测量能最大化利用电池化学窗口,提升能量密度与续航里程;而符合功能安全标准的设计则是防止热失控等安全事故的基石。随着汽车电气化从48V轻混系统向400V/800V高压平台演进,BMS面临着测量精度、功能安全、高压隔离通信和系统成本等多重挑战。德州仪器的BQ796xx和BQ75614系列芯片,

weixin_27017211的博客 342

28、基准剂量法:原理、应用与计算详解

本文详细介绍了基准剂量法(BMD)的原理、在监管机构中的应用以及具体的计算方法。内容涵盖样本量与BMD的关系、主要监管机构如EPA对BMD的应用、BMD的模型选择与数据拟合过程、拟合优度评估、下置信限(BMDL)计算,以及实验设计对BMD结果的影响。同时,还讨论了剂量指标和响应选择的关键问题,为理解和应用基准剂量法提供了全面的参考。

info6的博客 280

sql注入以及防范

登陆验证注入: //万能用户名失效 //万能密码 xx' or 1='1 //万能用户名 xxx' union select * from users/* $sql="select * from users where username='$username' and password='$password'"; //万能密码 33 union select * from use...

weixin_30755393的博客 100

QtQuick QML教程(2):qml语法介绍

​ qml一个普通的文本文件,后缀是.qml, 一个qml文件主要由两部分组成:(1) import语句 :这个就像C++中的头文件, 使用 import 导入qml需要的相关模块,可以查询Qt文档进行导入,注意每个版本的Qt模块声明可能都不同,相比于QWidget项目,QtQuick的变动是很大的;(2) QML对象树 :根对象是Window, 然后可以在Window中添加各种控件,例如按钮,文本,菜单等。

琅嬛福地 551

youdiancms 8.0 sql注入漏洞

Youdiancms sql injection vulnerability Youdiancms sql injection vulnerability First download youdiancms 8.0 to build a local test environment http://www.youdiancms.com/ Successfully set up a local t...

qq_36093477的博客 5959

华为od 面试八股文_C++_04_含答案

华为od 面试八股文_C++_04_含答案

MISAYAONE的博客 2472

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SQL注入过滤的绕过

在实际的项目开发中,程序猿一般都会使用函数过滤一些字符,以达到防止SQL注入。譬如,下面的php代码使用 preg_replace函数过滤了一些字符 preg_replace('A' , 'B' , C):执行一个正则表达式的搜索和替换,这个的意思是搜索C中符合A的部分,然后用B来代替。 有关这个函数更多的详情:preg_replace函数详解 过滤了字符我们就注入不了了吗?no ,...

谢公子的博客 6608

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SQL注入防御与绕过

如果代码里区分大小写的话,也有其他办法可以解决过滤问题,如双拼绕过,比如关键字"or"被过滤了,可以在"or"之间插入一个"or",即"oorr",一般只会过滤一个关键字,然后剩下来的or就成功执行了。在输入语句时,发现报错中所有语句都连在一起,说明空格被过滤了,解决办法就是用其他符号代替空格,比如之前做过一题就是空格被过滤,我解决问题的办法就是用括号( )代替空格。还有其他办法也能起到代替空格的效果,比如注释符/**/绕过,如果只过滤了空格,没有过滤 /* ,那么我们可以利用 /**/ 来绕过空格过滤。

m0_63628553的博客 2731

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

网络安全笔记-SQL注入

SQL注入是开发者对用户输入的参数过滤不严格,导致用户输入的数据能够影响预设查询功能的一种技术

L120305q的博客 2402

深入解析布尔注入:原理、实战与防御

布尔注入是一种隐蔽性强、危害大的攻击方式,其核心在于利用逻辑条件与响应差异逐步窃取数据。防御需从代码规范(如参数化查询)、权限控制、错误处理等多维度构建安全防线。对于渗透测试人员,掌握自动化工具(如sqlmap)与手动脚本的结合使用,可大幅提升攻击效率。

w2361734601的博客 1227

揭秘PHP数据安全防线:PDO预处理究竟为何能100%防御SQL注入?

掌握PHP数据安全核心方法,深入解析PHP PDO预处理防止SQL注入原理。适用于各类数据库操作场景,通过参数绑定隔离数据与指令,从根本上杜绝恶意注入风险。安全高效,值得收藏。

CompiTide的博客 769

SQL注入--基础防御

SQL注入是指攻击者通过向网站输入框中插入恶意SQL语句,从而绕过身份验证获取敏感数据,甚至控制整个数据库的攻击方式。

rasssel的博客 430

PHP表单安全五步法:从XSS与SQL注入防御到实战应用

在Web开发中,表单处理是保障应用安全的关键环节,其核心在于对用户输入数据的严格管控。从技术原理上看,攻击者常利用应用程序将用户输入直接拼接为代码执行的漏洞,例如在SQL查询中嵌入恶意指令引发SQL注入,或在HTML输出中注入脚本导致XSS攻击。这些安全威胁的防御价值在于构建纵深防御体系,确保数据与代码的严格分离。在实际应用场景中,开发者需要遵循一套清晰的处理流程:从数据接收时的初步类型检查,到基于白名单的严格验证,再到使用参数化查询防御SQL注入,最后通过HTML转义抵御XSS攻击。本文聚焦于PHP环境下

weixin_42524171的博客 340

DVWA SQL注入防御绕过:编码与注释技巧

在Web安全领域,SQL注入(SQL Injection)始终是威胁排名前三的风险漏洞。DVWA(Damn Vulnerable Web Application)作为主流的漏洞测试平台,其SQL注入模块从低到高四个安全级别(Low/Medium/High/Impossible)完整模拟了真实世界中的防御演进过程。本文将通过分析DVWA各层级防御机制,系统讲解如何利用编码转换与注释注入等高级技巧突破...

gitblog_00067的博客 568

SQL注入【原理、判断、常见类型、绕过、文件读写和防御】

SQL注入

FisrtBqy的博客 874

SQL注入绕过WAF的8种手法与实战防御策略

“WAF能100%拦截SQL注入?”——答案是否定的。据OWASP 2024年报告,​通过绕过WAF实现。攻击者不断迭代技术,从协议解析漏洞到数据库特性利用,形成了一场永不停歇的攻防博弈。。。

2409_89125175的博客 1451

SQL注入攻防实战:从原理到绕过与防御的纵深体系

SQL注入作为Web安全领域的核心威胁,其本质是数据与代码的混淆,攻击者通过构造恶意输入,使数据库执行非预期指令,从而窃取或篡改数据。理解其原理需从注入点类型(如字符型、数字型)和攻击手法(联合查询、报错注入、布尔/时间盲注)入手。在工程实践中,最根本的防御技术是参数化查询(预编译语句),它能彻底分离SQL结构与数据,而输入验证、最小权限原则及WAF部署则构成纵深防御体系。然而,攻击者常通过混淆编码、等价替换、利用数据库特性等方式进行绕过,例如在CTF挑战和靶场演练中,针对过滤规则的空格、关键词及WAF的绕

weixin_34049948的博客 375
上一篇: SQL注入防御之一——伪静态(PHP)
下一篇: SQL注入防御之三——SQL语句预处理(PHP)
Tim_PHPer
博客等级 码龄11年 227粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值