使用 PHP 字段验证的方法



其他方法的最佳实践是什么;除了

!empty();
isset();
!is_null();

并为变量赋值,例如

$variable = $_POST['value']` 

我是否使用 来确保表单数据经过验证,足以使用?

我是否尝试使用字段长度和正则表达式验证?

如果端点是使用 MySQL 和 PHP 的 API htmlspecialchars(),使用这些方法是否会导致数据丢失的潜在问题?

您可以使用

filter_input 方法并使用类似 FILTER_SANITIZE_SPECIAL_CHARS 的过滤器。这是过滤帖子参数的更好方法。函数.过滤器输入.php

对于输入验证,我会向您指出开放 Web 应用程序安全项目 (OWASP)。有关于数据验证,PHP过滤器,备忘单和XSS保护的页面。

由于您特别引用了MySQL,因此请注意,最好的安全实践是使用PDO或MySQLi来参数化您的语句。在防止MySQL注入方面,参数化语句比依赖净化的输入更有效,因为PHP不依赖于语法来区分用户输入和SQL查询本身。但是,当从数据库访问数据时,htmlspecialchars()仍然可以派上用场,以防止XSS攻击。

优秀的答案谢谢!

对于MySQL方面来说,参数化语句肯定是唯一使用的方法。

我想对我来说最重要的是通过 post 方法提交值。

如果我期待 JSON 并且只有 JSON,那么这样的事情应该在服务器端工作。

function isJSON(MyTestStr){
    try {
        var MyJSON = JSON.stringify(MyTestStr);
        var json = JSON.parse(MyJSON);
        if(typeof(MyTestStr) == 'string')
            if(MyTestStr.length == 0)
                return false;
    }
   catch(e){
        return false;
    }
    return true;
}

然后,我应该能够通过直接从 JSON 中提取值并在 PHP 脚本中使用它们来进一步做任何事情,而不必担心。

输入数据的每次使用都需要不同的过滤/保护。

首先,我喜欢做

$foo = @$_POST['foo'];
if (empty(foo)) ... // take different action if foo is totally missing (not just blank)

要插入到 MySQL,请使用 API 中提供的转义机制 - real_escape_string 或"绑定"。 请勿使用 mysql_* API,它已被 mysqli_* 替换。 不要将多个查询合并到单个调用中。

要在 HTML 页面上显示,请使用 htmlentities 。 注意:在插入数据库表之前不要使用它;这只会把桌子弄得乱七八糟。 相反,在显示之前要有使用它的纪律。

如果你有一个旧版本的PHP,你可能会想使用魔术报价。 不要! 正如评论所说,"[这种]一刀切的逃避/引用方法是错误的,而且是彻头彻尾的危险。

对于 JSON,我喜欢json_encode(...)json_decode(..., TRUE)

最新更新