Итак, проект, над которым я работаю, требует от меня предоставления клиентам формы для размещения на их веб-сайте.
Когда пользователь моих клиентов заполняет и отправляет форму, данные должны быть вставлены в мою базу данных.
Теперь я могу создать php-файл, в котором клиент может использовать form action
с database user
только с INSERT
привилегия для одной конкретной таблицы, но это все еще оставляет эту таблицу уязвимой для заполнения данных Database connection
подробности.
Итак, как я могу убедиться, что данные вставляются в таблицу только через форму, а не вручную, чтобы предотвратить наполнение?
Постскриптум Открыты для других предложений о том, как добиться этого безопасно, спасибо.
Не существует такой вещи, как «Ручная вставка», поскольку существуют только HTTP-запросы. Пользователь, использующий браузер, и пользователь, использующий автоматизированный инструмент, не различимы.
Так что вы действительно хотите сделать?
Ограничить количество вставок
Позвольте вашему клиенту публиковать на вашей странице PHP, что-то вроде http://example.org/insert.php где вы можете ограничить скорость вставки.
Это позволяет кто-нибудь вставить в вашу базу данных.
Никогда не предоставляйте необработанный доступ к вашей базе данных.
Ограничить пользователей, которые могут вставить
Вы должны посмотреть в OAuth что очень просто и понятно, или вы можете использовать асимметричное шифрование для аутентификации (в основном, как это делает SSH).
После регистрации вы предоставляете своим клиентам закрытый ключ API, который однозначно идентифицирует их и необходим для доступа к вашему API. При желании вы можете запросить у них список (конечных) доменов, с которых они будут обращаться к вашему API.
После вставки вы можете проверить ключ API для проверки и идентифицировать своего клиента, выполняя любую политику, которую вы хотите (включая обратный запрос IP-адреса отправителя на соответствие зарегистрированным доменам, ограничение скорости, отзыв, аудит и т. Д.).
Так или иначе, вы не должны предоставлять кому-либо доступ к вашей БД и заставлять своих клиентов запрашивать вставку серверная сторона, иначе Вы должны позволить кому-либо вставить в вашу базу данных для того, чтобы использовать ваш сервис.
Вы хотите реализовать защиту от подделки межсайтовых запросов. Видеть это: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet