如何在不使用隐藏表单域的情况下将ID传递给Controller?

时间:2018-06-27 22:38:40

标签: php laravel-5.6

让我们假设我具有以下形式,并且我想在论坛上的话题中发表评论:

<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传递给控制器​​方法来存储帖子?我可以通过会话数据传递它,还是有一种我只是忽略的方式。

我也不认为这是授权问题:经过身份验证的用户有权回复这些帖子-如果有办法我可以利用授权发挥自己的优势,我很想知道,但是我只是看不到像这样解决。

1 个答案:

答案 0 :(得分:2)

tl; dr

您可以将实际线程ID存储在临时会话变量或cookie中。


我认为您将要错误地解决此问题,您不必担心用户输入的内容,而应该担心如何处理用户输入的内容。您的代码应准备就绪,可以处理任何此类旁路尝试,因此,您应该设置正确的验证/清除方法,而不是遵循"security through obscurity"的理念。

通常,您在执行任何其他验证之前,先检查是否允许用户在相关线程上执行CRUD操作。

您还提到:

  

我的问题是用户可以编辑ID的值,并最终将响应提交到论坛上的其他话题。

坦白地说,只要他们没有执行本不应该执行的CRUD动作,我就不会发现任何问题。坦白地说,我(作为开发人员)并不真正将其视为 my 问题,因为用户将键入回复并将其发布到另一个完整的线程中。