2016-08-27 9 views
0

Мне интересно, насколько безопасно использовать этот код. В частности, $_SERVER['REMOTE_ADDR'] и $_SERVER['HTTP_USER_AGENT']

Я занимаюсь некоторыми исследованиями по этому вопросу. Насколько я могу судить, должно быть безопасно просто сравнивать переменные, как я здесь? Я должен беспокоиться только об их значениях при их использовании для запуска SQL-запросов или при отображении их содержимого на моих страницах?

В зависимости от того, где я их использую, я должен запустить mysqli_real_escape_string или htmlspecialchars.

Когда следует использовать функции trim или stripslashes?

Я просто пытаюсь защитить свой сайт от взлома наиболее очевидными/распространенными способами. Не требует огромной защиты, но я бы хотел, чтобы она была, по крайней мере, прилично защищена!

Что-нибудь я не замечаю или делаю неправильно? Есть ли какой-нибудь путеводитель, объясняющий большую часть этого?

session_start(); 

    if (!isset($_SESSION['logged_in'])) { 
      $_SESSION['logged_in'] = false; 
      $_SESSION['ip_address'] = $_SERVER['REMOTE_ADDR']; 
      $_SESSION['user_agent'] = (isset($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : ''; 
    } else { 
      if ($_SESSION['ip_address'] !== $_SERVER['REMOTE_ADDR'] || ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT'])) { 
        session_destroy(); 
        header('Location: view/index.php'); 
        die(); 
      } 
    } 
+0

Вы имеете в виду '$ _SERVER', а не' $ _SESSION'. – Barmar

+0

'$ _SERVER ['REMOTE_ADDR']' поступает с веб-сервера и сообщает вам, что такое подключенный IP-адрес. '$ _SERVER ['HTTP_X']' значения поступают из HTTP-заголовка, отправленного клиентом, и его можно каким-либо образом манипулировать. Эти значения не должны быть доверенными и должны обрабатываться как обычные пользовательские входы. –

+0

Да, упс, исправлено –

ответ

0

$_SERVER['REMOTE_ADDR'] создается веб-сервер, это безопасно и надежно. Это всегда просто IP-адрес в цифровом формате, вам не нужно его дезинфицировать.

$_SERVER['HTTP_USER_AGENT'] происходит от клиента, и он может содержать что угодно. Если вы собираетесь хранить его в базе данных или отображать его, вам нужно рассматривать его как любой другой пользовательский ввод.