Какой лучший способ в Ruby очистить строку URL, предоставленную пользователем, чтобы ее можно было интерполировать в команду оболочки? - PullRequest
1 голос
/ 20 декабря 2009

Я хочу позволить пользователю веб-приложения ввести URL-адрес, а затем передать этот URL-адрес в curl. Я бы лучше использовал curl, чем Net :: HTTP или open-uri. Но это создает угрозу безопасности. Какой лучший способ проверить строку URL-адреса и предотвратить любые инъекционные атаки?

Я думаю просто использовать регулярное выражение, подобное этому, для проверки на инъекционную атаку:

raise "possible injection attack" if url =~ /[\s']/ 

и если проверка прошла успешно, просто вызовите curl следующим образом:

html = `curl '#{url}'`

Это достаточно безопасно?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2009
system("curl", url)

это безопасно, поскольку параметры передаются непосредственно в main(argv) команды, а не обрабатываются процессором командной строки. Например system("echo", "* && echo shenanigan") буквально выводит * && echo shenanigan.

1 голос
/ 20 декабря 2009

Может быть, вам лучше использовать такую ​​библиотеку, как libcurl (чтобы избежать необходимости использовать команды оболочки)?

...