Я новичок в мире программирования, и я достаточно усвоил основные веб-приложения CRUD-типа, используя HTML-AJAX-PHP-MySQL. Я научился кодировать как хобби и, как результат, использовал только настройку WAMP / XAMP (localhost). Теперь я хочу начать использовать VPS и научиться настраивать его и в конечном итоге открывать новый проект для общественного использования.
Я замечаю, что всякий раз, когда я отправляю данные формы в свой PHP-файл с помощью AJAX или даже с обычным POST, если я открываю отладчик Chrome и перехожу в «Сеть», я могу видеть отправляемые данные, а также к тому файлу backend PHP отправляет данные.
Если пользователь может это увидеть, могут ли они перехватить эти данные, изменить их и отправить в один и тот же внутренний файл PHP? Если они создают свою собственную простую HTML-страницу и отправляют данные POST в мой PHP-файл, это сработает?
Если да, то как я могу избежать этого? Я читал об использовании HTTPS, но я все еще смущен. Будет ли использование HTTPS означать, что мне придется каким-то образом изменить код?
Очевидно, браузер будет знать, какие данные он отправляет, и он будет показывать его в отладчике. HTTPS шифрует данные в пути, а удаленный сервер расшифровывает их при получении; т.е. он защищает от любых третьих сторон в середине, которые могут читать или манипулировать данными.
Это может стать шоком для вас (или, возможно, нет), но общение с вашим сервером происходит исключительно по HTTP (S). Это простой текстовый протокол. Любой пользователь может отправлять произвольные HTTP-запросы на ваш сервер в любое время из любого места. HTTPS зашифрован или нет. Если вас беспокоит кто-то, манипулирующий данными, отправляемыми через инструменты отладчика браузеров … ваши проблемы полностью неверно направлены. Есть много более простых способов отправить любой произвольный обработанный HTTP-запрос на ваш сервер, даже не перейдя на ваш сайт.
Ваш сервер может полагаться только на полученные данные и должен строго проверять данные по своим достоинствам. Попытка заблокировать клиентскую сторону в любом случае бесполезна.
Это еще проще. Если вы используете GET или POST для передачи параметров, HTTP-запрос отправляется на ваш сервер клиентом пользователя, будь то веб-браузер, telnet или что-то еще. Пользователь может знать, что эти параметры POST просто потому, что это пользователь, который их отправляет – независимо от личного участия пользователя в этом процессе.
Вы берете проблему с неправильного конца. Одним из наиболее важных правил программирования является: Никогда не доверять пользовательским записям, это основное правило программирования! Пользователи могут и будут делать ошибки, а некоторые из них будут пытаться повредить вам или украсть у вас. Добро пожаловать в клуб.
Поэтому вы не должны позволять вашему коду выполнять какую-либо операцию, которая может нанести вам какой-либо ущерб, если вы получите POST или GET параметры, которые вы не ожидаете, будь то по ошибке или из-за злонамеренных намерений. Если ваш код, кстати, он разработан, делает вас уязвимым для вреда просто путем отправки определенных значений POST на одну из ваших страниц, тогда ваш дизайн виноват, и вы должны переделать его с учетом этой проблемы.
Эта проблема является серьезной проблемой при разработке программ, вы найдете много документации, руководств и советов о том, как предотвратить превращение вашего кода против вас.
Не волнуйтесь, это не так сложно справиться, и тот факт, что вы придумали эту заботу сами, показывает, насколько вы хороши в том, чтобы разобраться в том, как вы делаете хороший код, нет причин, по которым вы должны потерпеть неудачу.
Не стесняйтесь публиковать еще один вопрос, если вы застряли в отношении конкретного вопроса, взяв обновление безопасности.
Каждый может отправить все, что захочет в ваше приложение. HTTPS просто означает, что они не могут видеть и манипулировать тем, что другие отправляют в ваше приложение. Но вы всегда должны работать в предположении, что то, что отправлено в ваше приложение как POST, GET, COOKIE или что-то злое.
HTTPS шифрует в пути, поэтому не будет устранять эту проблему.
Вы не можете доверять кому-либо на стороне клиента. Любые данные, отправленные через веб-форму, могут быть установлены независимо от того, что хочет клиент. Им даже не нужно их перехватывать. Они могут просто изменить HTML на странице.
Об этом нет. Вы можете и должны выполнять проверку на стороне клиента. Но, поскольку это, как правило, просто JavaScript, его можно изменить / отключить.
Таким образом, вы должны проверить всю сторону сервера данных при его получении. Цифры должны быть цифрами, полосами любых обратных косых черт или недействительными специальными символами и т. Д.
В HTTPS канал TLS устанавливается ранее, и данные HTTP передаются, поэтому с этой точки зрения нет никакой разницы между запросами GET и POST.
Он зашифрован, но он должен защищать только атаки mitm.
ваш php-бэкэнд понятия не имеет, откуда поступают данные, из-за чего вы должны предположить, что любые данные, которые он получает, поступают прямо от хакера.
Поскольку вы не можете защитить от отвратительных данных, отправляемых вам, вы должны убедиться, что вы обрабатываете все полученные данные безопасно. Некоторые шаги, которые необходимо предпринять, включают в себя обеспечение того, что любые загруженные файлы не могут быть выполнены (например, если кто-то загружает файл php вместо изображения), гарантируя, что полученные данные никогда не будут напрямую взаимодействовать с базой данных (например, https://xkcd.com/327 / ), и гарантируя, что вы не доверяете кому-либо только потому, что говорят, что они вошли в систему как пользователь.
Чтобы защитить вас, сделайте некоторое исследование того, что вы делаете, с полученными пост-данными и найдите лучшие практики для всего, что есть.