Безопасно ли передавать результат проверки непосредственно новому объекту? - PullRequest
0 голосов
/ 09 октября 2019

Я установил следующий класс запросов для проверки ввода:

.
.
.
class SupplierStoreRequest extends FormRequest
{
    .
    .
    .
    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'address' => 'required|string|max:255',
        ];
    }

}

И у меня в контроллере есть следующий метод:

public function store(SupplierStoreRequest $request)
{
    $validated = $request->validated();
    $supplier = new Supplier($validated);
    $supplier->save();
    return redirect()->route('Admin::supplier.index');
}

, который работает точно так, как ожидается. Мой вопрос:

Существует ли риск внедрения SQL или JavaScript или других угроз безопасности в этом коде или класс FormRequest позаботился об этом?

1 Ответ

1 голос
/ 09 октября 2019

TL; DR Подготовленные операторы с помощью Eloquent и экранирование с htmlspecialchars через переменные блейда - это способ предотвращения внедрения SQL и JavaScript. Валидация предназначена только для проверки, введен ли пользовательский ввод в ожидаемом формате (который может быть даже JavasScript или SQL специально).

Если вы используете Eloquent (без raw), вы используете подготовленные операторы,которые помогают предотвратить инъекции SQL. Валидация не является частью этого процесса и предназначена только для проверки достоверности ввода, а не для атак как таковых.

Конструктор запросов к базе данных Laravel предоставляет удобный и удобный интерфейс для создания и запусказапросы к базе данных. Он может использоваться для выполнения большинства операций с базами данных в вашем приложении и работает во всех поддерживаемых системах баз данных.

Конструктор запросов Laravel использует привязку параметров PDO для защиты вашего приложения от атак внедрения SQL-кода. Нет необходимости очищать строки, передаваемые как привязки.

Что касается внедрения JavaScript, то же самое относится и к использованию операторов {{ $var }} в файлах Blade. Вы не должны полагаться на проверку исключительно для предотвращения атак. Действительно, действительно очень трудно предотвратить все виды атак с помощью проверки.

Операторы Blade {{}} автоматически отправляются через функцию PHP htmlspecialchars для предотвращения атак XSS.

https://laravel.com/docs/5.8/blade#displaying-data

...