什么是 最佳实践其他方法;
!empty();
isset();
!is_null();
并为变量赋值,例如
$variable = $_POST['value']`
我是否用它来确保表单数据的验证足够干净以便使用?
我是否会尝试使用字段长度和正则表达式验证?
如果端点是使用MySQL和PHP的API,使用htmlspecialchars()
使用这些方法会导致数据丢失的潜在问题吗?
答案 0 :(得分:2)
您可以使用filter_input方法并使用FILTER_SANITIZE_SPECIAL_CHARS
之类的过滤器。它是过滤你的帖子参数的更好方法。 function.filter-input.php
答案 1 :(得分:1)
对于输入验证,我会指向Open Web Application Security Project(OWASP)。有data validation,PHP filters,cheat sheets和XSS 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)
。