【发布时间】:2017-11-24 10:28:20
【问题描述】:
当我直接在脚本中提供 URL 时,此代码可以正常工作。
require 'nokogiri'
require 'open-uri'
get_url = "http://google.com"
doc = Nokogiri::HTML(open(get_url))
puts doc
我尝试在用户输入中输入“http://google.com”,但这不起作用并引发 Bad uri 错误并显示
没有这样的文件或目录@rb_sysopen
require 'nokogiri'
require 'open-uri'
get_url = gets
doc = Nokogiri::HTML(open(get_url))
puts doc
谁能告诉我我做错了什么?我也尝试在 google 上查找,但没有直接的答案。
【问题讨论】:
-
我不确定,但我认为这可能是为了防止 XSS 攻击。从用户输入中获取 URL 是非常冒险的 - 您可以查看对其进行清理的方法,但您正在做的事情对我来说看起来非常冒险。
-
我应该在到达 open(get_url) 之前尝试使用 Regex 进行验证吗?
-
是不是因为需要使用
gets.chomp?当前代码示例中将有一个尾随换行符。 -
不要将用户输入直接传递给
open。如果输入包含在反引号中,它也可以执行系统命令。 youtube.com/watch?v=djaInGGBVFQ -
谢谢你提到这个@Drenmi :) 但是,我知道它运行 Kernel.open 并且可以执行命令的事实......我不会在 open 中使用它:D
标签: ruby-on-rails ruby nokogiri open-uri