【问题标题】:How to secure my html+PHP forms to prevent user hacking/changes如何保护我的 html+PHP 表单以防止用户黑客/更改
【发布时间】:2012-12-31 18:02:30
【问题描述】:

我在我的网站上遇到了一个巨大的问题,我花了好几个月的时间来解决这个问题。问题在于用户能够使用诸如 firebug 之类的工具和其他类似方法来更改我网站的 HTML。问题是,如果用户更改了表单的一部分,他们可能会更改消息/帖子/等的发送者。

我目前的 cmets、messages、posts 和其他表单大部分都是这样设置的(至于发送用户信息以供使用:

 <form rel="1"></form>

我使用rel 作为存储内容的用户ID 的地方。所以这将转到 ID 为 1 的用户。那么问题是如果用户在 html 中将其更改为喜欢 5,然后提交表单它将转到用户 5。怎么可能仔细检查这个当信息到达服务器时,如果它发生了变化或其他什么,它就不会通过。

我唯一能想到的就是对用户 ID 或其他内容进行散列处理并将该值存储在 rel 中。这并不能解决问题,但它可能会让某人更难弄清楚。

【问题讨论】:

标签: php html forms security


【解决方案1】:

将用户 ID 存储在会话中。依赖用户输入的重要信息是一个糟糕的主意。

session_start();
$_SESSION['user'] = array();
$_SESSION['user']['id'] = $result_set['id']; // or however else you may have retrieved their UID
$_SESSION['user']['name'] = $result_set['username']; // STORE ALL THE VARIABLES!!!

【讨论】:

  • 谢谢,这是个好主意。我也考虑过使用会话,在某些情况下可以正常工作,但是为了让您了解一点,我的网站是一个类似于 facebook 的社交网络,所以我将如何使用类似的评论表单来做到这一点当新闻流类型的页面上有 20 个或更多帖子时?
  • 在这种情况下使用会话应该完全没问题。
  • 好吧,我想我只是想知道如何收集每个帖子的所有信息,但我想这就像让它创建一个新的 SESSION 一样简单,因为它会打印出我的每个帖子以及我对内容的其他任何内容吗?我想我一直认为同时进行多个会话会有点矫枉过正。这样的事情会很好,对吧? $_SESSION['postID']['userID']
  • 为什么需要将用户 ID 放在每个帖子的单独会话中?
  • 其实我可能不会。我想主要信息只是 postID,用于表单响应。
【解决方案2】:

你应该考虑这样做

  1. 用户 ID 和用户应明文存储
  2. 密码应使用 SHA 和盐进行散列,盐的长度应与 SHA 散列的长度相等(256、512 等)
  3. 使用会话密钥,存储在服务器和 $_SESSION 中的随机字符串,如果 $_SESSION['userid'] 匹配数据库用户 ID 并且 $_SESSION['session_key'] 匹配数据库 session_key ,它是安全的
  4. 在会话中使用过期计时器,存储会话应过期的时间值,始终检查会话是否有效或是否过期
  5. 任何 DOM 元素中都不应将任何身份验证数据存储为纯 html,它应存储在会话或最坏情况下的 cookie 中

【讨论】:

  • 会话在站点退出时被销毁,为什么需要一个计时器?
  • 如果他让他的浏览器保持打开状态假设 1 小时......忘记他已登录您的应用程序......其他人坐在他的电脑上并可以访问他的数据,不要想用户将始终关闭浏览器
  • 哦,对了,有些人离开电脑后仍然不关闭东西。多么不幸。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2020-05-14
  • 2016-03-27
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多