在PHP中验证和清理用户输入
使用PHP提供的在PHP中验证和清理用户输入,php,input-sanitization,input-filtering,Php,Input Sanitization,Input Filtering,使用PHP提供的filter\u var()和sanitize\u var()过滤和净化变量被认为是最佳实践,还是有更好的选择 谢谢你。 < P>我总是会考虑下面的咒语… “从不信任用户输入” ctype_alpha、ctype_alnum在验证方面也表现出色,请记住也要验证客户端(javascript验证),这将有助于减少服务器负载,我想在任何HTML过滤/清理中提到这一点 对于通用验证(数字、日期和其他值),有很多库,也有内置函数,您可以选择最合适的,但我仍然想提及您是否已经使用Zend F
filter\u var()
和sanitize\u var()
过滤和净化变量被认为是最佳实践,还是有更好的选择
谢谢你。 < P>我总是会考虑下面的咒语… “从不信任用户输入” ctype_alpha、ctype_alnum在验证方面也表现出色,请记住也要验证客户端(javascript验证),这将有助于减少服务器负载,我想在任何HTML过滤/清理中提到这一点
对于通用验证(数字、日期和其他值),有很多库,也有内置函数,您可以选择最合适的,但我仍然想提及您是否已经使用Zend Framework。让我们尝试验证表单中的输入 我们需要做的第一件事是确认我们正在寻找的输入数据是否存在 然后我们使用filter_input()函数过滤输入数据
在下面的示例中,输入变量“email”被发送到PHP页面:我认为最好使用HTML5进行客户端验证,然后使用服务器端验证。PHP具有过滤字符串的函数,如FILTER\u SANITIZE\u STRING(尽管您不需要验证),您可以使用FILTER\u validate\u EMAIL而不是使用regex手动验证电子邮件。还可以使用限制,例如字符数等 概念上的例子
if form is submitted
if 'name' is not empty
create a variable that equals filter_var($_POST['name'], FILTER_SANITIZE_STRING)
if 'name' is empty then set echo an error message
if 'email is not empty
create a variable that equals filter_var($_POST['email'], FILTER_SANITIZE_STRING)
// then you can validate email
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
error message
// do this for other variables
if there's not error
send email and or a thank you message
//FORM here
这取决于具体情况,我会根据具体情况使用多种不同的方法。如果可能的话,最好使用内置版本,而不是自己滚动。奥利:一般来说。如果有必要对输入进行清理,这会是怎么做的呢?一般来说,没有(db、txt文件、表单、屏幕输出、xml等的不同方法),仅仅解释输入有多困难context@Francisc如果我们理解上下文,我们可以提供更具体的答案。老实说,我很高兴你问这个问题,因为太多的php开发人员甚至没有考虑这个问题。但现实是,我们需要知道你在“为”什么“消毒”。与SQL数据库甚至CLI相比,您对待进入LDAP的字符串有点不同。然而,我的假设是,我们正在讨论准备插入SQL数据库的数据,在这种情况下,您可能想看看使用PDO。客户端验证不能替代服务器端验证。您至少需要在服务器上进行验证,客户端验证对于可用性和减少服务器上的负载都很好,正如前面提到的,但是它很容易被绕过,所以请小心。您是说:“使用ctype_alpha而不是filter_string,因为这是一种更好的做法”还是说我还可以使用其他选项,这不是我要问的。谢谢。看起来你忘了复制这个例子了。