Безопасен ли этот Ruby PSQL от инъекций? - PullRequest
0 голосов
/ 29 мая 2019

Если у меня есть следующая инструкция 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="&#x2713;" /><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-последовательность для выхода из оператора

1 Ответ

2 голосов
/ 29 мая 2019

Да, это определенно 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 экранировать и очистить запрос и параметры для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...