Вопрос по скрипту PHP (redirect)

Troll_UA

Client
Регистрация
11.04.2016
Сообщения
121
Благодарностей
38
Баллы
28
Кто может помочь с скриптом для редиректа PHP. Задача стоит такая: скрипт на входе принимает старый url делает выборку с базы данных (где есть new_url и old_url) и перенаправляет 301 редиректом на новую страницу.

Отрыл в нете вот такой скрипт:
PHP:
<?php
function getRedirectUrl($productid)
{
// Connect to the database
$dServer = localhost;
$dDb = redirect;
$dUser = root;
$dPass = root;
$s = @mysql_connect($dServer, $dUser, $dPass) or die("Couldn't connect to database server");
@mysql_select_db($dDb, $s) or die("Couldn't connect to database");
$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;

$result = mysql_query($query);
$hasRecords = mysql_num_rows($result) == 0 ? false : true;

if (!$hasRecords)
{
$ret = 'http://test1.com/';
}
else
{
while($row = mysql_fetch_array($result))
{
$ret = 'http://test1.com/'. $row["new_url"];
}
}

mysql_close($s);
return $ret;
}

$productid = intval($_GET["productid"]);
$url = getRedirectUrl($productid);
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
exit();
?>
но проблема в том что скрипт получает с url только id и по нем делает выборку с БД, а у меня в url нет не каких id. Нужно переделать чтобы выборка была по другому параметру, но знаний не хватает.

Если кто сможет помочь, новый url искать предпочтительно по последней странице с url.


PS. Понимаю вопрос не про зенопостр, но почему то решил спросить тут.
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
PHP:
$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;
заменить на:
PHP:
$productid = mysql_real_escape_string($productid, $s);
$query = "SELECT new_url FROM redirects WHERE old_id = '". $productid ."'";
и

PHP:
$productid = intval($_GET["productid"]);
заменить на:
PHP:
$productid = filter_input(INPUT_SERVER, "REQUEST_URI", FILTER_SANITIZE_URL);
if ($productid === FALSE) {
    exit("hack attempt!");
}
Вроде более-менее должно тогда быть и не выйдет встроить SQL-Inj.

PS: архитектуру БД тоже нужно будет изменить, согласно тому, что хочется. Если я правильно понял - то в конкретно этом примере нужно будет сменить в SQL-запросе old_id на old_url. Плюс, нужно будет самостоятельно разобраться в правильном ли формате лежат в базе старые урлы, т.к. тут идет экранирование спецсимволов и удаление плохих символов из урл. Возможно, в БД это не сделано и тогда нужно будет подгонять или запрос (чревато sql-injection) или содержимое БД.
 
  • Спасибо
Реакции: Troll_UA

Troll_UA

Client
Регистрация
11.04.2016
Сообщения
121
Благодарностей
38
Баллы
28
PHP:
$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;
заменить на:
PHP:
$productid = mysql_real_escape_string($productid, $s);
$query = "SELECT new_url FROM redirects WHERE old_id = '". $productid ."'";
и

PHP:
$productid = intval($_GET["productid"]);
заменить на:
PHP:
$productid = filter_input(INPUT_SERVER, "REQUEST_URI", FILTER_SANITIZE_URL);
if ($productid === FALSE) {
    exit("hack attempt!");
}
Вроде более-менее должно тогда быть и не выйдет встроить SQL-Inj.

PS: архитектуру БД тоже нужно будет изменить, согласно тому, что хочется. Если я правильно понял - то в конкретно этом примере нужно будет сменить в SQL-запросе old_id на old_url. Плюс, нужно будет самостоятельно разобраться в правильном ли формате лежат в базе старые урлы, т.к. тут идет экранирование спецсимволов и удаление плохих символов из урл. Возможно, в БД это не сделано и тогда нужно будет подгонять или запрос (чревато sql-injection) или содержимое БД.
Спасибо большое, скрип меня спас.
 

ol1ver

Client
Регистрация
29.08.2013
Сообщения
332
Благодарностей
82
Баллы
28
$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid;
обязательно почитайте что такое sql inj, чтобы потом локти не кусать
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)