2016-09-28 2 views
2

Прошу прощения, если этот вопрос задан раньше, если он просто связал меня с ним в комментарии.

Итак, я создал веб-сервис для приложения android/iOS с php, который работает именно так.

  1. приложение отправляет запрос на PARAMATERS userID и foodType

  2. Файл php затем запрашивает базу данных, используя эти две переменные и возвращает json_encode результат.

Мое беспокойство в том, что если кто-то открыть мою ссылку на веб-сервис они могут спамить с должностями запросы в результате 100 захода в моей базе данных, которые просто не-нужен

Ниже приведен пример моего текущего файла getData.php

<?php 
$userID = mysql_escape_string($_POST['userID']); 
$foodType = mysql_escape_string($_POST['foodType']); 

$mysqli = getDB(); 

echo json_encode(getDate($mysqli, $userID, $foodType); //mysql database interaction is here 

$mysqli->close(); 
?> 

Там нет ничего, предотвращая попытки хакеров от попыток размещать вредоносные заявления SQL в моей базе данных

Итак, что мне интересно, если бы я добавил третий параметр в мой почтовый запрос под названием appID, это было бы хорошим решением?

Например, если бы я обновил файл getData.php ниже, это было бы намного безопаснее или есть уязвимость, которой я не хватает?

<?php 
$appID = $_POST['appID']; 

if($appID === "hardCodedEquivalentID"){ 
    $userID = mysql_escape_string($_POST['userID']); 
    $foodType = mysql_escape_string($_POST['foodType']); 

    $mysqli = getDB(); 

    echo json_encode(getDate($mysqli, $userID, $foodType); //mysql database interaction is here 

    $mysqli->close(); 
} 

?> 

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

+0

'' Здесь нет ничего, что помешало бы хакерам пытаться опубликовать вредоносные инструкции SQL в мою базу данных ". - Не было бы уязвимости SQL-инъекции. Мы не можем точно знать, потому что мы не видим ваш код доступа к данным, но, учитывая этот код, я считаю, что у вас есть такая уязвимость. '", если бы я добавил третий параметр в мой запрос на почту, называемый appID, это было бы хорошим решением? "- Кто-нибудь, использующий ваше приложение, увидит это значение. Это не секрет. – David

+0

@ Давид относительно вашего второго момента, как кто-нибудь сможет увидеть значение appID? –

+0

@CamConnor: путем мониторинга трафика между приложением и службой. Если вы не шифруете этот трафик в приложении? – David

ответ

-3

1- Использование mysql_real_escape_string()

2 - Используйте str_replace(" ","",$_POST['userID']) и str_replace("%20","",$_POST['userID']) (Поскольку вредоносные атаки связаны с использованием% 20 и пространства для ввода запроса sql)

3- Добавьте эту строку в верхней части страницы, так что скрипт только принимает вызов, если был с вашего сайта (Это то, что я использую тоже!)

$referrer = $_SERVER['HTTP_REFERER']; 
if (strpos($referrer,"yourwebsite.com")) { 
} else { 
die(); 
} 
+0

Все плохие советы. Черный список определенных символов не защищает от SQL-инъекции, * не выполняет ввод пользователя в качестве кода *. А заголовки рефереров легко подделываются. – David

+0

Конечно, это не полная профилактика, но будет фильтровать множество плохих запросов и помогает OP повысить безопасность. Не нужно -1. –

+0

Этот совет никому не помогает «повысить безопасность». Этот код обеспечивает * ложное * чувство безопасности. Он скрывает проблемы безопасности от разработчика, не скрывая их от злоумышленника. Это * противоположность * безопасности. Во всех отношениях есть потребность в -1, потому что это плохой ответ. – David

2

Чтобы ответить на ваш первый вопрос

Мое беспокойство в том, что если кто-то открыть мою ссылку на веб-службы, они может спамить с запросами пост, в результате 100 захода в моей базе данных , которые просто не-нужен

Если кто-то хочет выполнить DoS, вы не сможете многое сделать в своем коде, чтобы предотвратить его, но можете попробовать воспользоваться сервисом наподобие cloudflare. Не стоит беспокоиться об этом вначале.

О

Там нет ничего, предотвращая попытки хакеров от попыток опубликовать злонамеренные заявления SQL в моей базе данных

затем просто читать документацию на PDO

2

Прежде всего, используйте mysqli или PDO вместо mysql функция, которая устарела. Во-вторых, создайте функцию, которая будет аутентифицировать пользователя и узнать, имеет ли пользователь разрешение на доступ к данным. И в-третьих, попробуйте LIMIT данные до 100 или около того, если это возможно.

Hardcoding appId не является решением. Создайте уникальный идентификатор для каждого конкретного зарегистрированного пользователя, а затем сопоставьте это appId с этим конкретным пользователем. И когда истечет срок их сеанса, очистите токен доступа. И в начале их сеанса вы можете войти в них и создать новый токен доступа и использовать его для всего сеанса.

Смежные вопросы