0

我已经构建了一个注册表单,并且我已经实现了 JÖRN ZAEFFERER 的 jQuery Validation 插件,包括使用 CSS 对错误消息进行样式化,我现在想添加一层 PHP 来进行第二次验证,以防 JS 被关闭之后我将通过安全性运行数据:哈希/盐/加密等,然后将数据插入到 mySql 表中,然后编写一个程序以通过电子邮件验证帐户作为注册过程的一部分。

我是自学成才的,所以任何有更多经验的人都可以解释这个过程的最佳实践。我的问题是:PHP应该去哪里,嵌入到html文件中,在表单action =“”提交的单独的php文件中,或者在包含文件中?如果我使用的是盐或哈希或加密函数,那么关于安全性的最佳做法是什么,应该在包含文件中?最后一个问题是:jQuery 验证是浪费时间吗,最好只用 PHP 来做,如果两者都做,PHP 是把自己嵌入到 HTML 文件中,还是把它放在其他地方更好。

这是我第一次这样做,但它只是简单地将输入安全地放入数据库中,通过电子邮件进行验证,然后登录新用户然后去使用该网站。

我很想知道最佳实践,所以如果网络上有任何好的文章,请给我链接。

谢谢

蚂蚁电源

4

2 回答 2

2

所以你在这里问了很多不同的问题。我将一一介绍。

PHP应该去哪里,嵌入在html文件中,在表单action =“”提交的单独的php文件中,或者在包含文件中?

PHP 永远不会直接嵌入到 HTML 文档中。相反,将 PHP 视为动态 HTML 生成器。它创建发送到浏览器的 HTML(或 JSON,或其他),但实际上从未发送到浏览器本身。这就是为什么它被称为服务器端语言,而不是 JavaScript(也可以是服务器端,但这不相关)。所以你应该可以把你的验证放在你想要的任何地方。它需要在action调用表单时发生,所以它需要在发生的任何地方发生。像下面这样的东西应该可以工作:

<?php

function validate($data) {
  // Do your validation here, and return an array of errors.
  return $errors;
}

// Run the validation on the data posted from the form.
$errors = validate($_POST);
if (empty($errors)) {
  // The data was valid, save it to the database
  // (be sure to sanitize the data first).
} else {
  // The data was not valid, redirect the user or whatever.
}

如果我使用的是盐、散列或加密函数,那么安全方面的最佳做法是什么?它应该在包含文件中吗?

是的,使用加密功能。它不需要位于单独的文件中以确保安全:加密功能提供了安全性,而不是用户看不到文件的事实(阅读:实际安全性,而不是通过混淆的安全性)。但是,无论您使用什么盐来散列该值,都应该位于无法通过 Web 访问的单独文件中。如果用户可以看到您的哈希算法和盐,他们就可以开始暴力破解您的数据。

jQuery 验证是浪费时间吗,用 PHP 来做会更好吗?

jQuery 验证应该更多地被视为 UI/UX 改进而不是实际验证。由于您已经提到的原因,客户端(阅读:JavaScript)验证永远不应取代服务器端(阅读:PHP)验证。但我确实认为它可以为更好的用户体验做出贡献,所以有时两者都值得。

我会做的一件事是使用相同的方法来验证服务器端和客户端,这样您就不必编写两次验证代码。例如,如果您将验证函数放在另一个文件中,您可以使用 AJAX 将表单数据发送给它,然后接收返回的表单错误。

希望这可以帮助!

更新:另外,如果您正在做的是登录用户,请查看password_compat,它将成为 PHP 5.5 中 PHP 标准库的一部分。该库应该以可升级的方式为您解决许多安全问题。

于 2012-09-25T20:09:41.307 回答
0

最佳实践是创建一个验证数据的 php 函数或类方法,然后在定义为表单操作的单独文件中调用所述函数/方法。假设这是一个 POST 请求,您应该有一个单独的文件来处理该请求。验证不应该是这个文件的一部分,因为你应该能够在任何你想要的地方使用它。

TLDR:创建一个验证类,并在单独的处理文件中包含和使用它。

于 2012-09-25T19:57:42.223 回答