好的,这可能很明显,但还没有完全点击。我正在创建一个论坛/博客风格的应用程序。
我相当安全地从数据库中获取帖子,但评论开始有点困难了。 (我可能只是偏执,对吧?)。
如何在不暴露父消息 ID 的情况下添加评论? (比如在隐藏的表单字段或查询字符串中,或其他东西)。
我想我有点偏执,认为有人可能会使用 Firebug 或其他东西进入代码,并在提交前将隐藏的表单字段值更改为其他值。我想我必须确保用户有权对该特定帖子/类别发表评论?
注意事项: 用户已经登录。 这不是公开帖子
最佳答案
我建议您像这样设置数据库:
Comments
---------
id
encodedID
authorID
parentID
message
然后,因为表单字段有两个隐藏值,一个是 encodedID,第二个是您创建的哈希值。我建议散列为:
<?php
$hash = sha1(md5($encodedID . $userID . $_SERVER['REMOTE_ADDR'] . "abc1234"));
?>
然后,当用户提交表单时,验证哈希对于特定的 encodedID 和用户是否有效。这是一个简短的代码:
<?php
if(isset($_POST['submit']))
{
//Get the variables and all and sanitize the input of 'message'
if(sha1(md5($_POST['value1']. $userID . $_SERVER['REMOTE_ADDR'] . "abc1234")) == $_POST['value2'])
{
//User is valid.
}
else
{
//Invalid user.
//Document this.
}
}
$value1 = $encodedID; //Grab this from your database
$value2 = sha1(md5($value1 . $userID . $_SERVER['REMOTE_ADDR'] . "abc1234"));
?>
<form method="post" action="comment.php">
<input type="text" name="message" />
<input type="hidden" name="value1" value="<?php echo $value1; ?>" />
<input type="hidden" name="value2" value="<?php echo $value2; ?>" />
<input type="submit" name="submit" value="Comment" />
</form>
编辑: 只是一个小提示,但我建议您将 value1 和 value2 更改为抽象的东西,不要将其称为 encodedID 或类似名称,以免混淆任何用户将尝试打破它。
是的,md5 和 sha1 并不完全安全,但对于这种情况,它会起作用,因为您希望能够快速有效地处理评论。
关于php 安全评论逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6195061/