这个 php 代码清理是多余的还是不正确的? [复制]
Posted
技术标签:
【中文标题】这个 php 代码清理是多余的还是不正确的? [复制]【英文标题】:Is this php code sanitization redundant or incorrect? [duplicate] 【发布时间】:2018-08-11 18:35:09 【问题描述】:假设这段代码是在表单中按下提交按钮后执行的,目的是为了清理:
<?php
$yourname = check_input(filter_input(INPUT_POST, 'yourname', FILTER_SANITIZE_STRING));
$email = check_input(filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL));
$likeit = check_input(filter_input(INPUT_POST, 'likeit', FILTER_SANITIZE_STRING));
$comments = check_input(filter_input(INPUT_POST, 'comments', FILTER_SANITIZE_STRING));
function check_input($data)
$data = trim($data) . stripslashes($data) . htmlspecialchars($data);
return $data;
?>
考虑到正在应用 filter_input 函数,在这种情况下 check_input($data) 函数是否多余?
【问题讨论】:
我认为这个问题属于Code Review 过度错误!了解stripslashes() 和htmlspecialchars() 等每个函数的实际作用,以及在哪里使用它是合适的,而不是在不理解的情况下简单地将它们扔到函数中 上下文很高兴知道这里,你打算如何处理收集到的数据? 当然是保护表单免受黑客攻击和垃圾邮件 有时过滤器可能不会像您期望的那样运行。filter_var('foo(this is just a comment)@example.com', FILTER_SANITIZE_EMAIL);
,会破坏,什么是有效地址。
【参考方案1】:
check_input
函数的当前代码非常无用:您将输入返回连接 3 次,但应用了不同的过滤器
function check_input($data)
$data = trim($data) . stripslashes($data) . htmlspecialchars($data);
return $data;
关于filter_input()
:使用FILTER_SANITIZE_STRING
就足够了。来自documentation:
剥离标签,可选择剥离或编码特殊字符。
这基本上是您想要使用自己的功能。
不要忘记提防 SQL 注入攻击。按预期使用prepared statements 将使您保持安全。
【讨论】:
好的,谢谢。所以结果会是这样的:以上是关于这个 php 代码清理是多余的还是不正确的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
选择完全清理文件时,Jetbrains Rider 不清理 JavaScript 文件