在 Ruby 中创建单个反斜杠
Create single backslash in Ruby
我要执行:
echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin user
可以用"aA1.-_#*~^%':;?!@=/"
登录。
我试过了
str = "aA1.-_#*~^%':;?!@=/"
password = str.gsub("'", "\\'").gsub(";", "\;")
passwd_command = "echo" +
" #{password}" +
" | passwd" +
" --stdin user"
但结果是:
echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin aaa
我执行了:
[root@localhost ~]# echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin aaa
>
命令尚未完成。你有什么建议吗?
我建议Shellwords#escape因为这是它的目的。
require 'shellwords'
Shellwords.escape("aA1.-_#*~^%':;?!@=/")
#=> "aA1.-_\#\*\~\^\%\':\;\?\!@\=/"
我不知道 shellwords,但是默认的 Ruby 方法还不够吗?喜欢 %q 和 %x?
参见示例:https://simpleror.wordpress.com/2009/03/15/q-q-w-w-x-r-s/
我要执行:
echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin user
可以用"aA1.-_#*~^%':;?!@=/"
登录。
我试过了
str = "aA1.-_#*~^%':;?!@=/"
password = str.gsub("'", "\\'").gsub(";", "\;")
passwd_command = "echo" +
" #{password}" +
" | passwd" +
" --stdin user"
但结果是:
echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin aaa
我执行了:
[root@localhost ~]# echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin aaa
>
命令尚未完成。你有什么建议吗?
我建议Shellwords#escape因为这是它的目的。
require 'shellwords'
Shellwords.escape("aA1.-_#*~^%':;?!@=/")
#=> "aA1.-_\#\*\~\^\%\':\;\?\!@\=/"
我不知道 shellwords,但是默认的 Ruby 方法还不够吗?喜欢 %q 和 %x?
参见示例:https://simpleror.wordpress.com/2009/03/15/q-q-w-w-x-r-s/