【问题标题】:Form validation mostly in JavaScript, only security validation server-side表单验证主要在 JavaScript 中,仅在服务器端进行安全验证
【发布时间】:2012-03-07 18:07:27
【问题描述】:

我正在构建一个晦涩难懂的应用程序,该应用程序仅在涉及的注册过程后才可用,因此不应经常提交恶意数据。

我使用 Codeigniter 2.1 过滤所有 POST 变量。 Codeigniter 使用 PHP 函数 mysql_real_escape_string 以及其他措施来防止通过 POST 数据的 sql 注入攻击。

我使用 JavaScript 在客户端进行所有验证。 JavaScript 验证运行良好。当然,用户可以使用 cURL 或其他一些实用程序来绕过客户端验证,但是 Codeigniter 中的普通 PHP 验证应该可以防止 SQL 注入,对吧?

我可以在客户端进行验证并信任 Codeigniter 来保护数据库免受 SQL 注入攻击吗?

【问题讨论】:

  • SQL 注入只是需要担心的一件事(您可能可以安全地避免这种情况)。您应该始终使用服务器端验证,Javascript 验证只是一种便利功能(Javascript 甚至可以关闭,当您谈论安全性时,它毫无价值)。用户可以发送任何类型的数据,他们可以操作您的表单,甚至不需要 cURL。
  • 我同意应该实现服务器端验证,并且 Codeigniter 确实实现了一定级别的服务器端验证。问题:Codeigniter 是否进行了足够的验证,根本不需要任何验证。
  • 当然不够。它可以防止某些类型的攻击,但您始终必须严格。如果您希望有一个日期,请只接受一个日期。如果您需要一个数字,则只接受一个数字。等等。您应该考虑不存在客户端验证。另外,过滤和验证也不一样。

标签: php validation webforms codeigniter-2


【解决方案1】:

这就是 codeigniter 所声称的。您可以在 system/core/Security.php 文件中找到它

清理数据,以防止跨站点脚本攻击。 这个功能做了大量的工作,但它非常彻底, 旨在防止即使是最模糊的 XSS 尝试。没有什么是 当然,永远 100% 万无一失,但我无法得到 任何东西都通过了过滤器。

【讨论】:

    【解决方案2】:

    恕我直言,这很简单。如果它使用mysql_real_escape_string,你在所有情况下都不安全。有关更多信息,请参阅此答案:Best way to prevent SQL Injection in PHP

    除了你不安全之外,它还使用过时的函数来与 mysql 对话。

    另外:您应该始终进行服务器端验证!永远不要相信客户端!

    【讨论】:

    • 我同意应该实现服务器端验证,并且 Codeigniter 确实实现了一定级别的服务器端验证。问题:Codeigniter 是否进行了足够的验证,根本不需要任何验证。
    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2019-10-21
    • 2018-06-24
    相关资源
    最近更新 更多