使用 redirect_back 后验证用户是否获得授权
Verifying user is authorized after using redirect_back
我有一个方法可以创建一个新的用户会话,并在成功登录后重定向回上一个屏幕。它引入了一个安全问题,有人可以输入 url 导航到他们不应该访问的页面。该应用程序将引导他们登录,但在使用有效凭据登录后(只是不是适当的许可级别),它会将他们重定向到他们手动输入 url 的页面。我如何验证 redirect_back
没有将用户发送到他们不应该访问的页面?
这是会话创建方法:
def create
@user = authenticate(params)
sign_in(@user) do |status|
if status.success?
redirect_back root_path
else
flash.now.alert = status.failure_message
render :new, status: :unauthorized
end
end
end
有没有办法查看它将把它们发回哪个地址,因为我可以做类似的事情
if back_url.includes? "admin"
redirect_to root_path
end
您不能依赖 URL 晦涩难懂的应用程序安全性。您的管理路由或控制器应受到保护,以便只有登录的管理员才能访问它们。
您可以通过路由文件中的路由约束(我的偏好)或在所有管理控制器上一致应用的之前操作来执行此操作 returns 如果当前用户不是 403管理员。
我有一个方法可以创建一个新的用户会话,并在成功登录后重定向回上一个屏幕。它引入了一个安全问题,有人可以输入 url 导航到他们不应该访问的页面。该应用程序将引导他们登录,但在使用有效凭据登录后(只是不是适当的许可级别),它会将他们重定向到他们手动输入 url 的页面。我如何验证 redirect_back
没有将用户发送到他们不应该访问的页面?
这是会话创建方法:
def create
@user = authenticate(params)
sign_in(@user) do |status|
if status.success?
redirect_back root_path
else
flash.now.alert = status.failure_message
render :new, status: :unauthorized
end
end
end
有没有办法查看它将把它们发回哪个地址,因为我可以做类似的事情
if back_url.includes? "admin"
redirect_to root_path
end
您不能依赖 URL 晦涩难懂的应用程序安全性。您的管理路由或控制器应受到保护,以便只有登录的管理员才能访问它们。
您可以通过路由文件中的路由约束(我的偏好)或在所有管理控制器上一致应用的之前操作来执行此操作 returns 如果当前用户不是 403管理员。