如何修复PHP代码中的HTTP Response Splitting漏洞?
搞定HTTP Response Splitting漏洞:问题解析与修复方案
首先得搞明白啥是HTTP Response Splitting(HTTP响应拆分):这是一种攻击者利用HTTP头注入换行符(\r或\n)的攻击方式,能把原本的响应头拆成多个,甚至伪造全新的HTTP响应,进而搞会话劫持、钓鱼这类坏事儿。
回到你的代码,RIPS检测到的风险确实出在这行:
header("Location: index.php?email=$email&showID=pswrd");
虽然你用了filter_var()验证邮箱格式,但关键问题是:当你把$email直接拼接到Location头的URL参数里时,如果攻击者能构造出包含换行符的输入(哪怕邮箱验证理论上应该拦截,但工具会从数据流角度判定“用户可控输入进入了header这个敏感输出点”),就可能触发响应拆分。
修复方法很简单,两步走:
- 对URL参数做编码:用
urlencode()函数处理$email,它会把所有非URL安全的字符(包括换行、特殊符号)转换成%XX的格式,彻底杜绝换行符进入HTTP头的可能。
修改后的代码行应该是:header("Location: index.php?email=" . urlencode($email) . "&showID=pswrd"); - 顺便修正一个小bug:你代码里的
$message赋值逻辑有问题,会覆盖掉邮箱内容,改成这样才对:$message = "Email Address: " . $email . "\nPassword: " . $password . "\n";
这样处理后,不仅能解决响应拆分的漏洞,还能保证URL参数的合法性,避免其他潜在的注入问题。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

