Предотвращение Внедрения SQL / Хороший метод Ruby

Что такое хороший метод в Ruby для предотвращения Внедрения SQL?

5
задан Zombies 13 February 2010 в 19:46
поделиться

3 ответа

в прямом рубине? используйте подготовленные операторы:

require 'mysql'
db = Mysql.new('localhost', 'user', 'password', 'database')
statement = db.prepare "SELECT * FROM table WHERE field = ?"
statement.execute 'value'
statement.fetch
statement.close
7
ответ дан 18 December 2019 в 14:45
поделиться

Не только в Ruby - свяжите параметры (будь то в базе данных или в коде клиента).

-121--4690663-

Кажется, что это простая замена:

$ d='\n'
$ echo "a*DIVIDER*b" | sed "s/\*DIVIDER\*/$d/"
a
b

Может быть, я не понимаю, чего вы пытаетесь достичь.

Тогда, может быть, этот шаг может занять место последних двух ваших:

sed -n ":a;$ {s/\n/$DIVIDER/g;p;b};N;ba"

Обратите внимание на пространство после знака доллара. Она не позволяет оболочке интерпретировать «$ {s»... как имя переменной.

И как ghostdog74 , вы путями слишком много вызовов sed . Вы можете изменить множество символов трубы на обратную косую черту (продолжение линии) и удалить «sed» из всех, кроме первого (оставьте «-e» везде). (непроверено)

-121--4817542-

Проверьте руководство, которое у них есть по этому вопросу: http://guides.rubyonrails.org/security.html#injection

В основном, вы хотите использовать переменные привязки в ваших моделях для поиска данных, а не встроенных параметров.

Model.find(:first, :conditions => ["login = ? AND password = ?", entered_user_name, entered_password])
3
ответ дан 18 December 2019 в 14:45
поделиться

Вы печатаете неподписанное значение как подписанное? При дополнении двумя значение с самым значительным битовым набором будет напечатано как отрицательное. Попробуйте% u для неподписанных

-121--4577915-

% ld или% lu в зависимости от требуемой длины.

-121--4577916-

Не только в Ruby - свяжите параметры (будь то в базе данных или в коде клиента).

3
ответ дан 18 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: