让我们假设我具有以下形式,并且我想在论坛上的话题中发表评论:
<form action="{{ route('post.store') }}" method="POST">
@csrf
<label>Response
<textarea name="content"></textarea>
<label>
<button>Post Response</button>
</form>
为了将此帖子与我要回复的线程相关联,我还想传递我要回复的线程的ID。我可以使用隐藏的输入字段来做到这一点,例如:
<input type="hidden" value="{{ $thread->id }}">
我的问题是用户可以编辑ID的值,并最终将响应提交到论坛上的其他主题。我知道这是个挑剔的问题,但这不是我希望用户能够做到的事情。
我还如何将该ID传递给控制器方法来存储帖子?我可以通过会话数据传递它,还是有一种我只是忽略的方式。
我也不认为这是授权问题:经过身份验证的用户有权回复这些帖子-如果有办法我可以利用授权发挥自己的优势,我很想知道,但是我只是看不到像这样解决。
答案 0 :(得分:2)
您可以将实际线程ID存储在临时会话变量或cookie中。
我认为您将要错误地解决此问题,您不必担心用户输入的内容,而应该担心如何处理用户输入的内容。您的代码应准备就绪,可以处理任何此类旁路尝试,因此,您应该设置正确的验证/清除方法,而不是遵循"security through obscurity"的理念。
通常,您在执行任何其他验证之前,先检查是否允许用户在相关线程上执行CRUD操作。
您还提到:
坦白地说,只要他们没有执行本不应该执行的CRUD动作,我就不会发现任何问题。坦白地说,我(作为开发人员)并不真正将其视为 my 问题,因为用户将键入回复并将其发布到另一个完整的线程中。我的问题是用户可以编辑ID的值,并最终将响应提交到论坛上的其他话题。