关于 header() 和表单安全性的一些东西


Something about header() and security of forms

我正在构建一个登录系统,我也希望让它更安全一点。我不会发布我的整个登录过程文件,因为它还没有完成,但我确实需要一个简短的待办事项样式列表来使整个系统更安全。我知道使用 PDO 的预处理语句有助于防止 SQL 注入。我显然也在用盐散列密码。还有什么关键的事情吗?真的会帮助我!

我还在某处读到不建议在表格中使用header()。(例如:在注册过程完成后重定向用户。这是真的还是假的?还有什么其他选择?

顺便说一句,表单数据显然将在另一个页面中处理,我想知道是否可以从流程文件发回错误(例如"用户名太短")。我知道使用 jQuery 的 .post() 和回调函数很容易做到,但我只是好奇:D

这是我对登录系统的建议:

  • 将用户的 ID 存储在 Cookie 中
  • 生成特殊令牌和哈希+盐,并将它们存储在 cookie 中
  • 将所有内容存储在数据库中
  • 每次页面加载时从 cookie 中获取数据,并尝试在数据库中搜索它们
  • 如果未找到,则注销用户
  • 每次页面加载时更改令牌

您可以使用header()重定向用户,也可以在它之后使用die()exit(),因为如果您不使用其中一个,其余代码将继续执行。

当然,你可以发回错误。 例如,如果您有

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

然后在行动中.php,当检查$_POST['username']的长度时,如果它太短,请执行类似

 print('<p class="warnings">The username is too short; it must be between X and Y characters.</p>');
 require('yourform.php');

其中yourform.php包含上述表单的 HTML。