Neste artigo, exploraremos o Cross-Site Scripting (XSS), uma vulnerabilidade comum em aplicações web, incluindo aquelas desenvolvidas em Ruby com o framework Sinatra. Vamos entender o que é o XSS, como ele afeta suas aplicações Sinatra e as melhores práticas para mitigar esse risco.
O que é framework Sinatra?
Sinatra é um framework web minimalista e de código aberto para a linguagem de programação Ruby. Ele foi criado para simplificar o desenvolvimento de aplicações web.
O que é Cross-Site Scripting (XSS)?
O Cross-Site Scripting (XSS) é uma vulnerabilidade de segurança que permite que um invasor insira código malicioso, geralmente scripts JavaScript, em uma aplicação web. Esse código é então executado no navegador dos usuários que acessam a página afetada, permitindo que o invasor roube informações, manipule a aparência da página, redirecione os usuários para sites maliciosos e execute ações indesejadas em nome dos usuários afetados.
Criando uma aplicação web Ruby com Sinatra
Vamos criar uma aplicação web para simular a vulnerabilidade XSS.
Para utilizar o framework Sinatra, é preciso ter o Ruby instalado e mais a gem do Sinatra.
Para instalar a gem do Sinatra, basta digitar o código abaixo no terminal:
gem install sinatra
Crie um arquivo Ruby, vou chamar de app.rb, contendo o seguinte código:
require 'sinatra'
get '/user' do
name = params['name']
"Olá, #{name}"
end
No terminal, digite o seguinte comando para iniciar o servidor na porta 3000 e interpretar o código acima:
ruby app.rb -p 3000
Nossa aplicação exibe o nome do usuário inserido no parâmetro name da página user, ficando assim:
http://localhost:3000/user?name=Hackademy
Quando inserido um código HTML/JavaScript no parâmetro name, é executado pelo navegador, como no exemplo abaixo:
http://localhost:3000/user?name=<script>alert('Hackademy')</script>
Mitigando XSS em aplicações web Ruby
Uma forma de prevenir a vulnerabilidade de Cross-Site Scripting (XSS), é utilizando o método Rack::Utils.escape_html fornecido pela biblioteca Rack, que é amplamente utilizada em aplicações web Ruby.
A função escape_html substitui caracteres especiais no texto, como “<“, “>”,” &”, e outros, por suas entidades HTML correspondentes. Por exemplo, o caractere “<“ é substituído por “<”, o caractere “>” é substituído por “>”, e o caractere “&” é substituído por “&”.
Abaixo está o código e um exemplo, já com a mitigação da vulnerabilidade:
require 'sinatra'
require 'rake'
get '/user' do
name = params['name']
Rack::Utils.escape_html("Olá, #{name}")
end
Esta é uma das formas de prevenir o XSS, existem outras práticas, talvez eu traga em outro artigo.
Espero que tenham gostado 😉