09
Май
2017

Как валидировать URL?

Пользователь может оставлять в базе данных 2 типа ссылок.

  • ссылка на какой либо ресурс (именно сайт, блог, форум и тд)
  • ссылка на изображение ( баннер, картинка, скриншот и тп.)

Мне необходимо проверить валидность этих ссылок, что за первой находится именно реальный сайт, а за второй именно изображение, (расширения в принципе можно Ограничить конкретными gif, png и jpeg).

По сути я пытаюсь защититься от нехорошего пользователя, который решит поломать моё детище, отправив в БД какую-нибудь заразу.

Вот что имею в чистом виде без валидации:

//<!-- Ссылки на ресурс banURL1 + изображение banIMG1 -->

if ($_POST['banURL1'] != '') {
    if (isset($_POST['banURL1'])) {
        $banURL1 = $_POST['banURL1'];
        if ($banURL1 ==   '') { 
            unset($banURL1);
        }
    }

    $banURL1_SQL = mysql_real_escape_string($banURL1);
    mysql_query (" UPDATE `users` SET `banURL1` = '$banURL1_SQL' WHERE `users`.`user` = '".mysql_real_escape_string($_SESSION['userin'])."';") ;  

    if ($_POST['banIMG1'] != '') {

    }
    if (isset($_POST['banIMG1'])) {
        $banIMG1 = $_POST['banIMG1'];
        if ($banIMG1 == '') {
            unset($banIMG1);
        }
    }

    $banIMG1_SQL = mysql_real_escape_string($banIMG1);
    mysql_query (" UPDATE `users` SET `banIMG1` = '$banIMG1_SQL' WHERE `users`.`user` = '".mysql_real_escape_string($_SESSION['userin'])."';") ;  
}

!!!!!!!!!!!!! АПДЕЙТ !!!!!!!!!!!!!!

С помощью добрых людей, на сегодня получилась вот такая конструкция:

//////////////////////////////

if ($_POST['banURL1'] != ''){
if (isset($_POST['banURL1'])){ $banURL1 = $_POST['banURL1']; if ($banURL1 == '') { unset($banURL1);} }

// ВАЛИДАЦИЯ URL

ini_set('display_errors', 'Off'); // теперь сообщений НЕ будет
if (!filter_var($_POST['banURL1'], FILTER_VALIDATE_URL) === false) {
$headers = get_headers($_POST['banURL1'], 1);
if ($headers == false){

  echo '<div class="col-xs-12 col-md-8" style="margin-bottom:  3px;">
  <div style= "background-color: black; padding: 5px 20px;" class="bord-block" data-toggle="modal" data-target="#ban1">
  <a href="#" >Oops! ' . htmlspecialchars($banURL1) . ' ТАм сайта нет!</a>
  </div>
  </div>';
}
else
{
    $type = $headers["Content-Type"];  
    if ($type == 'text/html; charset=utf-8' )

    {
    $banURL1_SQL = mysql_real_escape_string($banURL1);
        mysql_query (" UPDATE `users` SET `banURL1` = '$banURL1_SQL' WHERE `users`.`user` = '".mysql_real_escape_string($_SESSION['userin'])."';") ;  
    }
    else
    { 

 echo '<div class="col-xs-12 col-md-8" style="margin-bottom:  3px;">
  <div style= "background-color: black; padding: 5px 20px;" class="bord-block" data-toggle="modal" data-target="#ban1">
  <a href="#" >Oops! ' . htmlspecialchars($banURL1) . ' Это НЕ САЙТ!</a>
  </div>
  </div>';
    //echo("$url is not a valid URL");
   }    
  }

} else {

  echo  '<div class="col-xs-12 col-md-8" style="margin-bottom:  3px;">
  <div style= "background-color: black; padding: 5px 20px;" class="bord-block" data-toggle="modal" data-target="#ban1">
  <a href="#" >Oops! ' . htmlspecialchars($banURL1) . ' Кривые символы! URL!</a>
  </div>
  </div>';
 //echo("$url is not a valid URL");
}

ini_set('display_errors', 'On'); // сообщения с ошибками будут показываться

///


// IMG 1Валидация

if ($_POST['banIMG1'] != ''){

if (isset($_POST['banIMG1'])){ $banIMG1 = $_POST['banIMG1']; if ($banIMG1 == '') { unset($banIMG1);} 
ini_set('display_errors', 'Off'); // теперь сообщений НЕ будет
$im = imagecreatefromstring(file_get_contents($banIMG1));
if ($im === false) {
 //echo $banIMG1.' = Invalid image<br/>';
 echo
 '<div class="col-xs-12 col-md-8" style="margin-bottom:  3px;">
  <div style= "background-color: black; padding: 5px 20px;" class="bord-block" data-toggle="modal" data-target="#ban1">
  <a href="#" >Oops! ' . htmlspecialchars($banIMG1) . ' Invalid URI for IMG! Please enter a valid URL!</a>
  </div>
  </div>';
//exit();
}
else{
 //echo $banIMG1.' = ok<br/>';
    $banIMG1_SQL = mysql_real_escape_string($banIMG1);
 mysql_query (" UPDATE `users` SET `banIMG1` = '$banIMG1_SQL' WHERE `users`.`user` = '".mysql_real_escape_string($_SESSION['userin'])."';") ;  
}

imagedestroy($im);

  } 
 }
}

 ini_set('display_errors', 'On'); // сообщения с ошибками будут показываться

/////////////////////////////

При ближайшем рассмотрении вроде как работает... Возможно у кого то будут полезные замечания и конструктивная критика

Извините за формат кода... пока не освоился с правильным способом размещения его на портале.....

!!!! АПДЕЙТ 2 !!!!

На локальном работает нормально.. На хостинге все URL признаёт как "Это НЕ САЙТ!" НЕ ИЗОБРАЖЕНИЯ в БД не пускает В общем вопрос актуален.

Источник: https://ru.stackoverflow.com/questions/663750/%D0%9A%D0%B0%D0%BA-%D0%B2%D0%B0%D0%BB%D0%B8%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-url

Share

Тебе может это понравится...