我可以只使用 jQuery 验证还是需要 PHP? [关闭]

Posted

技术标签:

【中文标题】我可以只使用 jQuery 验证还是需要 PHP? [关闭]【英文标题】:Can I validate only with jQuery or do I need PHP? [closed] 【发布时间】:2014-07-18 07:20:56 【问题描述】:

我了解这两种语言之间的区别,但在表单验证方面。 jQuery 够用吗?

我可以在 jQuery/javascript 中验证我的表单,然后执行 AJAX 调用以将完成的表单发送到电子邮件地址吗?甚至可以使用 JavaScript 将表单数据发送到电子邮件地址吗?

还是用 php 做所有事情更安全?

我问这个是因为我习惯使用 PHP,但是,我最近开始使用更高级的 JavaScript 和 jQuery。

【问题讨论】:

当涉及到表单验证时,您正试图在这里比较苹果和橘子...... 我觉得我是。那么我应该只专注于 PHP 表单验证,让 Javascript 做“漂亮”的事情吗? 这里的大多数答案都深入介绍了它,但是 jquery 的东西可以处理快速和肮脏的,“请填写此表单输入”类型的东西,PHP 应该处理实际的格式/确保没有人试图注入恶意代码等。 @Robert,我冒昧地调整了您的问题以符合规则,并与所有答案的内容更加同步。因此,我尝试将主题集中在可用性和安全性问题上。 【参考方案1】:

jQuery/JavaScript 是客户端脚本语言,很容易绕过你应该使用客户端和服务器端验证的组合来获得可靠的输入。在我们需要 SMTP 服务器来发送将作为我们服务器端的电子邮件时,您必须使用 PHP 将您的表单信息通过电子邮件发送到所需的电子邮件目的地。

我希望这足以让您理解:)

【讨论】:

是的,非常感谢。【参考方案2】:

你应该做这两个验证 - jQuery 用于用户友好地响应用户丢失或输入错误的内容 - 尽快得到客户端的反馈。

您无法信任客户端,因此您始终需要进行服务器端数据检查 以确保所有内容都正确输入。

最好将数据传递过来并在服务器端再次检查,然后完成您的操作(电子邮件、数据库插入、输出)

【讨论】:

好的,非常感谢。【参考方案3】:

您可以在 JQuery 中制作更加用户友好的 UI。但是,您还应该在 PHP(服务器端)中进行验证,因为如果您不这样做,有人可以通过关闭 JavaScript 来绕过验证。还有其他方法可以解决这个问题,但作为一般规则,永远不要信任客户端进行验证。

换句话说,客户端验证 (JQuery/JavaScript) 不能替代服务器端验证。 JQuery 更多地用于用户体验。

由于您担心 AJAX,这里有一个代码示例:

PHP

//if there is an error:

header('HTTP/1.1 500 Internal Server Error');
header('Content-Type: application/json; charset=UTF-8');
die(json_encode(array('message' => 'ERROR', 'code' => 1337)));

//if there is not an error:
header('Content-Type: application/json');
echo json_encode(array("message"=>"All good here!"));

JQuery

//this is on submit, but you could do other events
$(document).ready(function()
    $("form").submit(function(e)
    
    e.preventDefault();
    $.ajax(
        type: "post",
        url: "path/to/your.php",
        data: $('form').serialize(),
    success: function(data)
    
            alert(data.message);
        ,
        error:  function(xhr, status, error) 
          var err = eval("(" + xhr.responseText + ")");
          alert(err.Message);
        ,
    dataType: "json");
    );
);

注意:我没有测试上面的代码,但它可能会让你知道该怎么做。

【讨论】:

所以只在不输入字段时做一些漂亮的东西,比如悬停框,然后通过 html 将 php 回显到框中? 这是一个很好的方法。您还需要确保您可以处理用户关闭 JavaScript 的情况。您可以使用 AJAX,也可以在 JavaScript 中重写验证,但我会采用 AJAX。 我有点害怕你提到使用 AJAX,我不太擅长。我的意思是,我可以从其他页面获取数据,但是当涉及到除此之外的任何内容时,我就没用了。 JQuery 有一个很好的AJAX function,PHP 有一个很好的函数json_encode。 AJAX 并不像看起来那么可怕。我曾经害怕它,但这并不难。 我添加了一些代码,希望它可能有用。【参考方案4】:

好吧..开始,不是可以选择其中一种的语言。

Javascript / jquery 是一种客户端语言,而 PHP 是一种服务器端语言。这是什么? Javascript 在客户端浏览器上运行,受其限制,并且可以由最终用户轻松更改并且具有我们不想要的行为。让 PHP 在服务器端运行,用户无法控制。它更安全,而且根据规则,人们不应该忽略 PHP(或其他服务器端语言)来验证表单。因此,我们确信我们的代码没有安全漏洞。

不过,两者都用还是很好的……jquery/JS 可以让你实时检查,省去了用户提交表单然后收到错误信息的麻烦……在 JS 中,就省去了这个工作。如果用户“破坏”该保护,则几乎无法通过服务器端的验证。

总之,PHP 总是...为了增强体验(强烈推荐),也使用 JS :)

【讨论】:

【参考方案5】:

让服务器进行任何验证至关重要,因为归根结底,IT 是与您的数据库、文件存储区域、电子邮件处理和执行任何命令进行通信的机制 - 即任何后果!

JavaScript 验证快速而有用,但正如其他人所说,只需将其关闭即可轻松绕过!或者,如果您的访问者使用没有 JavaScript 的浏览器怎么办?

【讨论】:

【参考方案6】:

最好同时使用:当用户填写表单或按下提交按钮时,使用 jQuery 测试输入。这在大多数情况下就足够了,但是由于用户可以在他们的浏览器中关闭 JavaScript,因此您也应该使用 PHP 检查发送的数据。如果数据可能会在您这边弄乱某些东西,这一点尤其重要,例如,如果数据被保存到数据库或其他东西中,那么 SQL 注入可能会造成巨大的混乱并危及您的安全......

如果您使用 PHP 检查数据,那么第一个 jQuery 部分并不是绝对必要的,但是如果用户在不必先重新加载页面的情况下获得有关他们是否正确填写表单的反馈,那就太好了...

不,我认为不可能使用 JavaScript 将表单数据发送到电子邮件地址。

【讨论】:

【参考方案7】:

无论您是否决定进行任何客户端验证,您都会始终也希望进行服务器端 (PHP) 验证,因为您永远不应该永远 信任用户提供的输入。

至于包括 jQuery/JavaScript 验证:这更多是一个风格或用户体验问题。如果希望您的用户对某些类型的错误(例如丢失或无效数据)有即时反馈,那么您绝对应该包括一些客户端验证。

【讨论】:

以上是关于我可以只使用 jQuery 验证还是需要 PHP? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery 和 php 测试表单输入是 1 位还是 2 位整数

仅保存按钮上的 jQuery 表单验证

jQuery远程验证电子邮件验证服务

使用 jQuery post 方法安全吗?

我可以将 Promises 传递给 jQuery.when(),还是只传递 Deferreds?

使用带有摘要身份验证、jquery ajax 调用的 RestFul PHP Web 服务