我在一个网络应用程序中遇到了一个例外,我最近正在通过以下网址开发:
http://domain.com/script.js?bcsi-ac-16E7C1CCF9EF6357=1C76413C00000002kmNHGZK2deV0Qz25TXynq3fMaPTrBAAAAgAAAD5tGgCEAwAACAAAAPUiAgA=
首先 - 世界上到底是什么?从搜索它听起来可能是它的某种cookie /会话变量...
其次,例外是关于常量的动态分配。我尝试了一个更简单的网址:
http://domain.com/script.js?bcsi-ac
这给出了一个关于变量或方法'bcsi'没有被定义的例外情况,就像它试图评估它一样......什么!?我当然希望人们不能让我的Rails应用程序只是通过将它传递给查询字符串来评估随机代码......
提供更多细节:我没有对路由或控制器中的查询字符串数据做任何异常。我只是接受参数并将它们传递给部分本地人(当然不是最干净的方式,但很简单 - 当然不应该让它将参数名称作为代码进行评估?)
答案 0 :(得分:1)
OKAY!再次回答我自己的问题。事实证明,将params作为本地传递给部分DOES会导致它将参数名称作为代码进行评估 - 显然它不能使用变量名称“bcsi-ac”,因此它会尝试对其进行评估。
但关于这是否构成安全风险的问题仍然存在......我似乎无法在事物上调用方法,或实际分配事物......但也许我还没有努力。在我看来,当传入包含无效变量名的locals哈希时,rails应该抛出异常。
答案 1 :(得分:0)
作为一般经验法则,只要您允许将网址中的字符串作为代码进行评估,您就会在应用程序中设置巨大的安全风险。您可能无法调用本地方法,因为您的方法存在于服务器端,而您正在评估的代码是客户端,但这肯定会使您的网站在XSS漏洞等方面打开...