c11056-福建-许荣煌-6.28

1、sql注入漏洞中,常见的防护方案有哪些?请简述原理和用法
(1)类型转换(数字型)
原理:将输入内容强制转换为整数或浮点来防止SQL注入

常用函数:

intval($input)

floatval()

floor()

(int)$input

$input + 0

以intval函数为例,用法如下:

quote($_GET['name']); /*预处理语句*/ $stmt =$pdo->prepare("SELECT id, name FROM users WHERE id=?;"); $stmt->execute([$_GET['id']]); ?>

(2)特殊字符转义(字符型)
原理:在单引号'、双引号"、反斜线\与 NULL前加上反斜线可用于防止SQL注入。
addslashes函数以及magic_quotes_gpc选项具有该功能,需要注意magic_quotes_gpc在php 7.4.x版本被禁止
其中,当magic_quotes_gpc=On时,如果post、get、cookie过来的数据有单引号、双引号、反斜线与 NULL等字符,PHP解析器就会自动增加转义字符\,如果这个选项为off,那么我们就必须调用addslashes函数来为字符串增加转义。
开启gpc,打开php.ini 找到 magic_quotes_gpc = Off 设置成On 重启服务,即可开启

運' or 1=1 # 实现单引号逃逸 ![image](https://img2024.cnblogs.com/blog/3618949/202507/3618949-20250703143905964-1061909078.png) 4、命令注入漏洞常见的函数有哪些? system( ):能够将字符串作为OS命令执行,自带输出功能。 exec( ):能够将字符串作为OS命令执行,需要输出执行结果。返回结果是有限的。 shell_exec( ):通过 shell 执行命令并将完整的输出以字符串的方式返回。 passthru( ):执行外部程序并且显示原始输出。 pcntl_exec( ):pcntl是linux下的⼀个扩展,可以支持php的多线程操作。pcntl_exec函数的作用是在当前进程空间执行。 popen( ):打开⼀个指向进程的管道,该进程由派生给定的 command 命令执行产生。 proc_open( ):执行⼀个命令,并且打开用来输入/输出的文件指针。 反单引号``:在php中称之为执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返。 ob_start( ): 是 PHP 中用于开启输出缓冲的函数 5、代码执行漏洞常见的函数有哪些? eval( ):函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。 assert( ):功能是判断⼀个表达式是否成立,返回true or false,重点是函数会执行此表达式。 preg_replace( ):执行⼀个正则表达式的搜索和替换。 call_user_func( ): 把第一个参数作为回调函数调用。 call_user_func_array( ):调用回调函数,并把⼀个数组参数作为回调函数的参数。 create_function( ):PHP中的内置函数,用于在PHP中创建匿名(lambda-style)函数。 6、如何结合伪协议通过文件包含漏洞读取文件?请简述原理 伪协议: data://、php://input (使用前提:allow_url_include=on) 、php://filter(无限制) 以php://filter伪协议为例: php://filter 伪协议允许对文件进行编码或解码,可以用于读取源码文件(绕过 include() 的 PHP 解析)对目标文件进行编码转换,绕过文件包含限制,获取文件原始内容。利用方式如下 使用php://filter/read=convert.base64-encode/resource=/etc/passwd来读取并以Base64编码形式输出/etc/passwd文件的内容,最后进行Base64解码获取源码。 7、复习php常见漏洞 SQL注入漏洞 概述:未过滤的用户输入直接拼接 SQL 语句,导致恶意 SQL 语句执行。 修复方案:使用预编译语句和参数化查询,对所有用户输入进行严格的验证和过滤。 命令注入 概述:应用程序在执行系统命令时,未对用户输入进行适当的过滤或验证,导致攻击者能够注入恶意命令并在服务器上执行。 修复方案:使用过滤函数内置函数 escapeshellcmd(), escapeshellarg(),过滤和转义输入中的特殊字符,使用白名单限制输入,禁用危险函数。 代码执行 概述:在WEB中,PHP代码执行是指应用程序过滤不严,用户通过http请求将代码注入到应用中执行。 修复方案:严格对用户的输入进行验证与过滤、避免使用动态执行函数如eval()、create_function()、assert()、preg_replace()等、禁用危险函数,在php.ini中禁用不安全的函数,比如eval()、exec()、system()、passthru()等。 文件包含 概述:直接包含用户可控的文件路径,导致本地/远程代码执行。 修复方案:用户输入不能作为 include()的目标、限制 allow_url_include = Off(防止 RFI)、使用白名单验证文件路径。 文件上传 概述:未对上传文件的类型、内容、后缀名等进行严格校验,导致恶意代码上传并执行。 修复方案:严格限制上传文件类型、文件名处理、限制文件上传目录。 变量覆盖漏洞 概述:攻击者通过用户输入覆盖 PHP 代码中的全局变量进而影响程序的正常逻辑,甚至执行恶意操作。 修复方案:避免 extract() 和 parse_str()覆盖全局变量、明确变量来源不依赖全局变量。 XSS漏洞 概述:未对用户输入的数据进行输出时的 HTML 实体编码,导致攻击者可以注入恶意 JavaScript。 修复方案:对所有输出到浏览器的内容进行适当的HTML实体编码。 SSRF漏洞 概述:是由于服务端提供了从其他服务器获取数据,但没有对地址或协议等进⾏过滤或限制造成的漏洞。 修复方案:校验用户输入的url,限制协议类型、使用白名单机制。 CSRF 概述:攻击者诱导用户在已认证的状态下向应用发送伪造请求。 修复方案:添加token/Referrer校验,拒绝空Referrer。 XXE 概述:攻击者通过自定义实体访问系统文件或远程资源。 修复方案:禁用XML解析器中的外部实体解析、使用安全的XML库(默认不支持外部实体)、验证和清理输入的XML内容,避免恶意内容被解析。 反序列化 概述:反序列化不可信数据导致代码执行或逻辑绕过。 修复方案:避免反序列化用户输入、使用 JSON 等安全格式替代
posted @ 2025-07-03 14:39  xu2025  阅读(5)  评论(0)    收藏  举报