防范使用Firebug的恶意用户窃取表单数据的最佳方法是什么?

4
我已经阅读了一些相关问题,如此问题此问题,但它们没有直接回答我的问题。像Firebug这样的开发者工具允许任何人在表单提交之前查看和操纵表单数据。一个很好的例子是调整隐藏的“会员ID”字段的值,以便将表单提交归功于另一个用户。
有什么最好的方法来防止这种篡改?我的研究表明,将敏感的表单输入移动到服务器端脚本中是一个不错的选择,但还有其他选项或考虑因素吗?
我熟悉PHP和jQuery,所以我的理想解决方案将使用其中一个或两个语言。

3
不仅仅是“恶意”用户 - 我经常在有趣的页面上使用Firebug,只是为了看看它们是如何被组装起来的。 - user2100815
2个回答

1

你不能使用jQuery来处理安全问题,因为它全部在客户端处理。

在你的例子中,可以使用PHP会话代替隐藏输入字段,因为正如你所指出的,这可以被操纵。

使用会话可能看起来像以下内容:

登录页面

<form action="login.php" method="post">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="submit" name="submit" value="submit">
</form>

login.php

// you have to include this on every page to be able to user sessions.
// also make sure that you include it before any output
session_start();

//Always sanitize the user input before doing any db actions.

//For example by using: `mysql_real_escape_string()` ( http://php.net/manual/en/function.mysql-real-escape-string.php ).

// check user credentials against db

$_SESSION['user'] = $dbresult['username'];

page-where-userid-is-required.php

session_start();

if (!isset($_SESSION['user'])) {
    // user is not logged in!
} else {
    // use user info to place order for example
}

会话将一直保持活动状态,直到用户关闭浏览器或会话过期(这是PHP设置)。

以上只是一些示例代码,以便让您了解。

它适用于较小的项目,但随着项目变得更加复杂,我建议采用MVC(模型,视图,控制器)方式。(http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)

但那只是另一个故事 :)


谢谢。我正在研究使用PHP会话,因为我从未在服务器端脚本中使用它们来收集用户数据。 - Ryan Burney
@Ryan:我更新了我的答案,提供了一个使用会话的示例。 - PeeHaa
Rock on. 我会试一下并回报的。非常感谢。 - Ryan Burney

1

以下是一些基本建议:

  • 您需要使用服务器端(PHP)脚本验证表单输入。

  • 不要依赖于敏感信息,例如来自表单的会员ID,而是可以将这些数据缓存到服务器会话中。这样,恶意用户就无法在运行时更改数据。

您仍然可以使用jQuery验证作为方便的工具来捕获基本的输入问题,但是只有经过服务器端代码验证的数据才是可信的。


谢谢您的回复。您介意详细说明一下如何在服务器会话中缓存数据吗?我正在使用一个可能已经包含此信息的CMS,但我不确定如何在我的服务器端脚本中获取它。PHP中有标准的获取此信息的方法吗?(编辑:我现在正在研究这个问题) - Ryan Burney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接