SWR*_*SWR 3 ruby ruby-on-rails
我从用户那里获取一个输入字符串,并将其用作命令行后端程序的参数.
确保此输入"安全"的最佳方法是什么?Aka他们没有插入"; cd /; rm -rf"或其他一些丑陋的字段?
没有任何消毒,我有......
@query = params[:query]
@result = %x( mycommand #{@query} )
Run Code Online (Sandbox Code Playgroud)
我需要得到命令的输出,所以我不能使用system("command","parameters"),因为它只返回true或false但会提供保护.
我知道这很危险......提前谢谢.
始终,始终定义您将接受的内容,然后拒绝其他所有内容.人们常常试图允许一切,然后否认坏事.
mycommand只需要字母数字输入加空格,那么只允许这样做.没有机会rm -rf /"偷偷摸摸",也不会有其他需要标点符号的其他10,000件事.mycommand
可用于定义"好"输入的语法/语义?比如它需要2个空格分隔的参数?不知道什么mycommand是我无法提供的具体细节,但你明白了这一点:不要试图抛弃坏事; 定义有效并抛弃其他一切.请注意,这仍然很难,但如果没有这种方法,几乎是不可能的.