首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php邮件表单安全性:识别新行的最可靠方法

php邮件表单安全性:识别新行的最可靠方法
EN

Stack Overflow用户
提问于 2012-06-27 18:16:05
回答 3查看 190关注 0票数 0

我正在尝试建立一个安全的php联系表单,以允许用户(希望不是垃圾邮件发送者)发送邮件。

我正在寻找在from:字段中检测新行的方法,用户将使用它在subject:字段中提交他们的电子邮件地址。

我有两个相同功能的替代方案来检测新行,我想听听你的意见,哪一个最可靠(意思是在大多数情况下都有效):

代码语言:javascript
运行
复制
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;
    }
}

提前感谢您的意见!

干杯

EN

回答 3

Stack Overflow用户

发布于 2012-06-27 18:30:11

更为中肯的问题是“哪一个更可靠?”这两种方法的效率都是无关紧要的,因为这两种方法的执行时间都不应该超过几毫秒。试图根据毫秒的时间在两者之间做出决定是一种micro-optimization

此外,你说的效率是什么意思?你是说哪一个更快?哪一个占用的内存最少?效率是一个定义不明确的术语,你需要更具体。

如果您一定要根据性能/效率需求做出决定,那么我建议您构建一个基准测试,自己找出哪一个最符合您的需求,因为最终只有您才能回答这个问题。

票数 1
EN

Stack Overflow用户

发布于 2012-06-27 18:50:55

我又给自己添加了两个函数,并对100000循环进行了基准测试:

代码语言:javascript
运行
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2012-06-27 21:09:08

实际上,我决定使用第一个函数,因为它涵盖了另外两种情况(%OA和%OD),并且还包含了不同OSes (\n,\n\r等)使用的所有换行符变体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11223922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档