Если у меня есть следующий оператор PSQL через ruby:
user = User.find_by_email(params[:email])
sql2 = "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"email\" = \'#{params[:email]}\' LIMIT 1"
@result3 = Otherdb.connection.execute(sql2);
Сдается по следующей форме:
<form action = "/sessions" accept-charset = "UTF-8" method = "post"><input name = "utf8" type = "hidden" value = "✓" /><input type = "hidden" name = "authenticity_token" value = "tj5rfiJG+yip8gXhMSq/RR/Znu+L/nhkGnqqK78wggRjI85zl4T/wBEkouY8XWlh2aylfKH0lZWjH282fc6Qdg= = " />
<div class = "login">
<h1>Login to Web App</h1>
<p id = "alert">User not present in db</p>
<form method = "post" action = "">
<p><label for = "email">Email</label>
<input type = "text" name = "email" id = "email" /></p>
<p><label for = "password">Password</label>
<input type = "password" name = "password" id = "password" /></p>
<p class = "remember_me">
<label for = "remember_me">
<input type = "checkbox" name = "remember_me" id = "remember_me" value = "1" />
Remember me on this computer
</label>
</p>
<p class = "submit"><input type = "submit" name = "commit" value = "Login" data-disable-with = "Login" /></p>
</form>
</div>
</form>
Обычно мне удавалось избежать формы, используя ', за которыми следуют символы, но я не могу получить какие-либо полезные нагрузки для выполнения.
Это безопасно или есть более сложная escape-последовательность для выхода из инструкции?
Да, это определенно SQL-инъекция.
Чтобы проверить это, вы можете передать SQL, как '; select count(*) from users;
в params[:email]
.
Чтобы избежать инъекции SQL, вы можете переписать свой код следующим образом:
sql2 = User.where(email: params[:email]).limit(1).to_sql
@result3 = Otherdb.connection.execute(sql2)
Просто позвольте ActiveRecord побег и дезинфицировать запрос и параметры для вас.
Честно говоря, не уверен, как выглядит ваша часть
password
, но ввод' OR 1=1--
в качестве адреса электронной почты вернет каждого пользователя. Так что да, это невероятно инъекционный, пожалуйста, не пытайтесь'; DROP TABLE users --
ради Бобби Столы