这个 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 文件

按钮激活后执行复选标记

PHP获取多个同名复选框的值的处理(完整正确版本)

PHP整理笔记七字符串处理

电脑系统优化硬盘分区软件安装缓存清理远程协助排查重装修复故障

React 中 useState 清理的必须性