用于PHP字段验证的方法有哪些

时间:2016-03-17 14:59:30

标签: php mysql regex validation post

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

之外
!empty();
isset();
!is_null();

并为变量赋值,例如

$variable = $_POST['value']` 

我是否用它来确保表单数据的验证足够干净以便使用?

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

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

4 个答案:

答案 0 :(得分:2)

您可以使用filter_input方法并使用FILTER_SANITIZE_SPECIAL_CHARS之类的过滤器。它是过滤你的帖子参数的更好方法。 function.filter-input.php

答案 1 :(得分:1)

对于输入验证,我会指向Open Web Application Security Project(OWASP)。有data validationPHP filterscheat sheetsXSS protection的网页。

由于您专门引用了MySQL,我会注意到最好的安全做法是使用PDO或MySQLi来参数化您的语句。参数化语句比依赖清理输入防止MySQL注入更有效,因为PHP不依赖于语法来区分用户输入和SQL查询本身。但是,从数据库访问数据时,htmlspecialchars()仍然可以派上用场来防止XSS攻击。

答案 2 :(得分:0)

优秀的答案谢谢!

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

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

如果我期待JSON而且只有JSON,那么像这样的东西应该在服务器端工作。

solr-5.4.1/server/solr/dummy/conf/

然后我应该能够通过直接从JSON中提取值并在PHP脚本中使用它们来做更多的事情而不用担心。

答案 3 :(得分:0)

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

首先,我喜欢做

$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,你可能会想要使用Magic Quotes。别!正如评论所说的那样“[这个]一刀切的方法来逃避/引用是错误的,并且非常危险。”

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