Безопасен ли подход jQuery / Ajax

У меня есть простая форма входа в систему, которая запускает скрипт jQuery, который отправляет запрос на PHP (ajax), а затем возвращает true, если вход в систему прошел успешно.

Мои 2 вопроса будут основаны на безопасности.

Я отправляю данные через ajax следующим образом:

$.ajax({
    type: "POST",
    url: "../Php/CheckUserLogin.php",
    data: {"userName" : userName, "password" : password},
    success: function(result){
        switch(result)
        {
            case "0":
                document.getElementById('errorMessage').innerHTML = "Uspesno ste se ulogovali!";
                document.getElementById('errorMessage').style.color = "green";
                break;
            case "NEPOSTOJECI_KORISNIK":
                document.getElementById('errorMessage').innerHTML = "Korisnik ne posotoji!";
                document.getElementById('errorMessage').style.color = "red";
                break;
            case "-1":
            case "1":
                document.getElementById('errorMessage').innerHTML = "Pogresna sifra!";
                document.getElementById('errorMessage').style.color = "red";
                break;
            default:
                document.getElementById('errorMessage').innerHTML = "Greska!";
                document.getElementById('errorMessage').style.color = "red";
                break;
        }
    }
});
  • Нужно ли мне сделать немного input filtering перед отправкой на мой PHP (я проверяю, пусты ли строки)?

В PHP я создаю такой оператор sql: $sql = "SELECT SIFRA FROM KORISNIK WHERE IME = '$input_Username'";

  • Правильно ли я использую его или есть другой (более безопасный) способ, как с parameters в sql - c#?

Пользователи могут отправлять на ваш сервер все, что им нравится, поэтому фильтрацию ввода следует использовать только для удобства использования (отображение ошибок для пользователей без предварительной отправки их на сервер). Вы должны делать проверки на стороне сервера. По последнему вопросу: вы уязвимы для SQL-инъекции. См. Как я могу предотвратить SQL-инъекцию в PHP?. (Но вы не должны задавать более одного вопроса за раз на Stack Overflow.)

Ivar 21.07.2018 21:40

Можете ли вы показать код CheckUserLogin.php?

PHP Web 21.07.2018 22:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
146
2

Ответы 2

вы должны использовать {$ input_Username} в строках, это более читабельно. отправлять запросы ajax - это нормально, и вам следует проверить свои строки.

$sql = "SELECT SIFRA FROM KORISNIK WHERE IME = {$input_Username}";

Нет, он не должен этим пользоваться. И по гораздо более важным причинам, чем удобочитаемость.

Danielius 21.07.2018 21:38

ну, запрос ajax можно очистить, так как для начала это хорошо. благодаря этому он узнает, как защитить сайт от XSS.

GAME DEV 21.07.2018 21:41

Продвигать код db, уязвимый для sql-инъекции, здесь - плохая вещь.

charlietfl 21.07.2018 21:47

«и вы должны проверить свои строки». Если вы имеете в виду JavaScript, как следует из вопроса, это не влияет на безопасность.

Ivar 21.07.2018 21:53

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

Что касается бэкэнда. Вы определенно никогда не должны использовать этот код, если вам не нужны данные в вашей базе данных.

Вы должны использовать подготовленные операторы, если используете PDO или mysqli, чтобы вы могли связывать параметры.

$sql = "SELECT SIFRA FROM KORISNIK WHERE IME = :input_username";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':input_username', $input_username);

http://php.net/manual/en/pdo.prepared-statements.php

http://php.net/manual/en/mysqli.prepare.php

Не забывайте, что вам нужно выполнить запрос.

Danielius 21.07.2018 22:05

Другие вопросы по теме