【问题标题】:A few questions about Form processing.?关于表单处理的几个问题。?
【发布时间】:2011-06-24 09:22:53
【问题描述】:

我想知道如何为表单添加更多安全性以防止攻击。根据过去几天在网络上的搜索以及我可以采用的方法,我找到了一些解决方案,我想在继续之前了解您的看法。

  1. 包含表单键以防止 XSS(跨站点脚本)和跨站点请求伪造总是好的吗?

  2. 处理表单数据的最佳方式是:

    1. AJAX
    2. 将表单处理代码放在同一页面的顶部并使用 $_SERVER['PHP_SELF'] 进行处理
    3. 将表单的操作设置到另一个页面并从那里处理所有值。
    4. 通过单个 PHP 类文件处理表单值。
  3. 过滤或清理表单数据的最佳方法是什么?

谢谢

【问题讨论】:

  • 客户端验证一切都很好而且很花哨,但最终你要依赖客户端来做正确的事情——认为攻击者会关心你是否要求“名字”不是空白的?永远不要依赖客户端做任何事情并验证服务器上的所有内容。

标签: php security


【解决方案1】:

这是我的常规设置。我基本上使用自定义框架。

我设置了处理特定数据的模型。例如,如果我有一个创建新员工的员工表单。我有一个员工模型。该模型已指定了在数据库中生成新员工所需的值。如果此模型中缺少任何值,当我尝试保存它时,它会抛出异常。这是我的第二层“输入验证”。第一层是一个简单的 java 脚本表单验证器,以确保没有丢失任何值。

现在,对于页面的任何类型的输入(GET、POST),我都有一个处理这些卫生问题的类。它遍历所有 $_POST 和 $_GET 值并清理它们(mysql_real_escape_string,php中的stripslashes)。

现在在 html 中设置我的表单数据.. php 可以处理表单数据“数组”,我的意思是如果我有一个名为“employee[name]”的表单输入并提交该表单,php 将识别该表单提交为 $_POST['employee']['name'].. 我知道这太棒了。现在,每个表单都有自己指定的模型所需的字段。我只是调用我的模型,将模型数据设置为 $inputClass->post('employee') (这是一个数组)并保存数据。

我更喜欢这种通用方法。它快速且易于设置,安全且有效。

编辑:另外,像 Ajax 和 Javascript 这样的东西是奢侈品。您不需要这些来处理表单,它们只是为用户增加了便利性。例如,在他们启用 javascript 之前,您可以在不重新加载页面的情况下验证表单。但请注意,您也应该始终通过 php 验证您的表单。

【讨论】:

  • 这真的帮助我理解了我应该如何处理表格。谢谢你,道尔顿,我非常感谢你的想法。
【解决方案2】:

看看这个: http://thedemosite.co.uk/phpformmailer/source_code_php_form_mailer_more_secure_than_cgi_form_mailers.php

它使用引荐来源网址进行检查,并使用非侵入式 javascript catcha 来防止垃圾邮件机器人提交表单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2011-01-19
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多