Другие ответы ответьте на это хорошо для Rails, и он будет работать нормально, если вы будете следовать их предложениям. В более общей настройке, когда вы должны справиться с этим самостоятельно, вы обычно можете использовать регулярное выражение для извлечения значения, которое находится в ожидаемом формате. Это действительно просто с целым id. Подумайте об этом так:
if params[:id] =~ /(\d+)/
safe_id = $1.to_i
# do something with safe_id now
end
Это становится немного сложнее, когда вы обрабатываете строки и произвольные данные. Если вам нужно обрабатывать такие данные, вы можете использовать методы цитирования, доступные для адаптеров базы данных. В Rails это в конечном счете свернутая в последовательный интерфейс:
safe_string = ActiveRecord::Base.connection.quote(unsafe_string)
Для большинства систем баз данных это будет обрабатывать одинарные и слеш особым образом.
Если вы находитесь за пределами Rails, вам придется использовать методы цитирования, специфичные для вашего адаптера базы данных, но использование очень похоже.
вынос:
- Если данные имеют определенный формат, применять формат с регулярным выражением
- В противном случае, используйте квотирование функцию вашего адаптера базы данных, чтобы сделать данные «безопасным» для использования в запрос
- Rails будет обрабатывать большую часть этого для вас, если вы правильно использовать различные методы и «условие»
спасибо. Я полагаю, это лучший способ избежать внедрения sql. Есть ли недостаток в использовании to_i? –
Не особенно, но я не вижу смысла в этой проверке paeudo либо – apneadiving
Я имею в виду, что Rails обрабатывает это для вас, поэтому не загрязняйте свой код – apneadiving