我正在尝试建立一个安全的php联系表单,以允许用户(希望不是垃圾邮件发送者)发送邮件。
我正在寻找在from:字段中检测新行的方法,用户将使用它在subject:字段中提交他们的电子邮件地址。
我有两个相同功能的替代方案来检测新行,我想听听你的意见,哪一个最可靠(意思是在大多数情况下都有效):
function containingnewlines1($stringtotest) {
if (preg_match("/(%0A|%0D|\\n+|\\r+)/i", $stringtotest) != 0) {
echo "Newline found. Suspected injection attempt";
exit;
}
}
function containingnewlines2($stringtotest) {
if (preg_match("/^\R$/", $stringtotest) != 0) {
echo "Newline found. Suspected injection attempt";
exit;
}
}提前感谢您的意见!
干杯
发布于 2012-06-27 18:50:55
我又给自己添加了两个函数,并对100000循环进行了基准测试:
function containingnewlines3($stringtotest) {
return (strpbrk($stringtotest,"\r\n") !== FALSE);
}
function containingnewlines4($stringtotest) {
return (strpos($stringtotest,"\n") !== FALSE && strpos($stringtotest,"\r\n") !== FALSE);
}
$start = microtime(TRUE);
for($x=0;$x<100000;$x++) {
containingnewlines1($html); // 0.272623 ms
containingnewlines2($html); // 0.244299 ms
containingnewlines3($html); // 0.377767 ms
containingnewlines4($html); // 0.142282 ms
}
echo (microtime(TRUE) - $start);https://stackoverflow.com/questions/11223922
复制相似问题