-6ren"> -我有关于 Ruby on Rails 3.2.11 和 Ruby 1.9.3 的网站。 什么会导致以下错误: (JSON::ParserError) "{N}: unexpected token at-6ren">
gpt4 book ai didi

ruby-on-rails - (JSON::ParserError) "{N}: unexpected token at ' alihack<%eval 请求(\"alihack.com\")%>

转载 作者:IT老高 更新时间:2023-10-28 12:44:49 26 4
gpt4 key购买 nike

我有关于 Ruby on Rails 3.2.11 和 Ruby 1.9.3 的网站。

什么会导致以下错误:

(JSON::ParserError) "{N}: unexpected token at 'alihack<%eval request(\"alihack.com\")%>

我在日志中有几个这样的错误。他们都试图评估请求(\“alihack.com\”)。

部分日志文件:

"REMOTE_ADDR" => "10.123.66.198",
"REQUEST_METHOD" => "PUT",
"REQUEST_PATH" => "/ali.txt",
"PATH_INFO" => "/ali.txt",
"REQUEST_URI" => "/ali.txt",
"SERVER_PROTOCOL" => "HTTP/1.1",
"HTTP_VERSION" => "HTTP/1.1",
"HTTP_X_REQUEST_START" => "1407690958116",
"HTTP_X_REQUEST_ID" => "47392d63-f113-48ba-bdd4-74492ebe64f6",
"HTTP_X_FORWARDED_PROTO" => "https",
"HTTP_X_FORWARDED_PORT" => "443",
"HTTP_X_FORWARDED_FOR" => "23.27.103.106, 199.27.133.183".

199.27.133.183 - 是 CLoudFlare IP。"REMOTE_ADDR"=> "10.93.15.235"和 "10.123.66.198"等我认为是代理的假IP。

这里是 a link家伙从同一个 IP 地址(23.27.103.106)的网站有同样的问题。

综上所述,所有错误的常见 ip 是 23.27.103.106,他们尝试使用 ruby​​ 的 eval 运行脚本。

所以我的问题是:他们试图找到什么类型的漏洞?该怎么办?屏蔽ip?

提前谢谢你。

最佳答案

为什么会这样?

这似乎是在尝试至少测试或利用远程代码执行漏洞。可能是一个通用的(针对 Rails 以外的平台),或者存在于早期版本中的一个。

然而,实际错误源于请求是带有 application/json header 的 HTTP PUT,但正文不是有效的 json。

要在您的开发环境中重现此内容:

curl -D - -X PUT --data "not json"-H "Content-Type: application/json"http://localhost:3000

更多详情

Rails action_dispatch 尝试通过传递要解码的主体来解析任何 json 请求

  # lib/action_dispatch/middleware/params_parser.rb

def parse_formatted_parameters(env)
...
strategy = @parsers[mime_type]
...

case strategy
when Proc
...
when :json
data = ActiveSupport::JSON.decode(request.body)
...

在这种情况下,它不是一个有效的 JSON,并引发错误,导致服务器报告 500。

可能的解决方案

我不完全确定解决此问题的最佳策略是什么。有几种可能:

  1. 您可以使用 iptables
  2. 阻止 IP 地址在 nginxapache 配置中
  3. 过滤(PUT 或全部)对 /ali.txt 的请求。
  4. 使用 rack-attack 之类的工具gem 并在那里应用过滤器。 (见 rack-attack issue)
  5. 使用 request_exception_handler gem 来捕获错误并在 Rails 中处理它(参见 this SO answerthis github issue)
  6. 在 Rails 的 routes.rb 中阻止 PUT 请求到所有 url,但明确允许的那些。看起来在这种情况下,甚至在到达 Rails 的路由之前就引发了错误 - 所以这可能是不可能的。
  7. 使用 rack-robustness中间件并使用 this configuration 之类的内容捕获 json 解析错误在 config/application.rb
  8. 编写您自己的中间件。类似于 this post 上的内容

我目前倾向于选项 #3、#4 或 #6。所有这些都可能对其他类型的机器人/扫描程序或将来可能弹出的其他无效请求派上用场......

很高兴听到人们对各种替代解决方案的看法

关于ruby-on-rails - (JSON::ParserError) "{N}: unexpected token at ' alihack<%eval 请求(\"alihack.com\")%>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25274125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com