【问题标题】:Rails do not parse my HTTP query stringRails 不解析我的 HTTP 查询字符串
【发布时间】:2013-08-02 12:32:47
【问题描述】:

我使用 CURL 发出了一个 HTTP 请求。

curl -X GET  \
http://localhost:3000/api/v1/user_api/35/edit?old_password=aa&new_password=bb&password_confirmation=cc

我的rails服务器只识别第一个参数

Started GET "/api/v1/user_api/35/edit?old_password=aa" for 127.0.0.1 at 2013-08-01 14:12:52 +0100
Processing by Api::V1::UserApiController#edit as */*
Parameters: {"old_password"=>"aa", "id"=>35}

知道这里有什么问题吗?

--------------------------编辑--------- --------------------------------------------------------

警告!这是处理密码重置的一个非常糟糕的疯狂示例。

该问题仅针对 curl 和查询解析问题的主题。

感谢你们所有的cmets

【问题讨论】:

  • 不要使用 GET 传递或更改密码。它会将其放入 URL 以及浏览器的历史记录和服务器日志中。请改用 POST 方法。
  • @theTinMan 您好,感谢您的评论。如果这是为移动应用设计的 api,POST 方法是否仍然比 GET 更可取?

标签: ruby-on-rails ruby http curl


【解决方案1】:

知道这里有什么问题吗?

您在查询字符串中以纯文本形式传递密码。

你先不这样做怎么样?


另外,您需要将您的 URL 放在引号中,因为 & 否则需要转义

curl -X GET  \
"http://localhost:3000/api/v1/user_api/35/edit?old_password=aa&new_password=bb&password_confirmation=cc"

但是说真的,请不要使用GET发送密码数据

【讨论】:

  • 它是一个暴露给移动应用程序的api。我想它是 GET 还是 POST 都没有关系,因为它不会被任何浏览器记录。加密现在对我来说是一个相当高级的话题,但可以肯定的是,我很快就会研究它
  • 至于解决方案,我一拿到开发机就测试一下,非常感谢。
  • 哈哈,我不是想笑,但它是为“移动应用程序”设计的,这一事实并没有减少安全威胁。
  • 因为我认为只有加密才能阻止黑客,而不是 GET 或 POST。未加密的 POST 正文有什么不同吗?如果我错了,请纠正我。
  • 显然您想使用 SSL,但在更新时使用 GET 仍然是一种不好的形式。这正是正是 POST 的用途。你可能不是 REST-ful,但尽量不要严重违反这些原则。
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
相关资源
最近更新 更多