Не могу получить переменные, когда изменил .htacces с дружественным URL - PullRequest
0 голосов
/ 17 мая 2018

Я любитель в php.У меня есть веб-сайт, где я загружаю проекты из БД, и, например, когда я хочу загрузить проект, URL-адрес выглядит следующим образом:

www.mywesite.com / proyecto.php? Id = 1

Я сделал .htaccess, чтобы использовать этот URL:

www.mywebsite.com / proyecto / id / 1

.htaccess

<ifModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine on
  RewriteRule proyecto/id/(.*)/ proyecto.php?id=$1 
  RewriteRule proyecto/id/(.*) proyecto.php?id=$1 
  RewriteRule ^([^\.]+)$ $1.php [NC,L]
  ErrorDocument 404 /error404.php
</ifModule>

Проблема сейчас в том, что переменные не определены из-за изменения URL, я думаю.Вот как я получаю переменные

$valorid = $_GET['id'];
$connection = new 
PDO('mysql:host='.$host.';dbname='.$db_name.';charset=utf8',''.$username.'', ''.$password.'');
foreach($connection->query('SELECT * FROM grafica WHERE id = '.$valorid.'') 
as $row) {

}

И я установил вот так

<?php echo $row['nombre'] />

Надеюсь, что кто-нибудь может помочь с этим.

Спасибо заранее.

1 Ответ

0 голосов
/ 18 мая 2018

Что касается вашего вопроса, на этот вопрос уже был дан ответ: Перезапись URL с помощью PHP

В будущем, пожалуйста, не забудьте найти возможные решения.Обратите внимание на следующее в вашем файле .htaccess:

<ifModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine on
  RewriteRule ^/proyecto/id/([0-9]+)/$ /proyecto.php?id=$1 
  RewriteRule ^([^\.]+)$ $1.php [NC,L]
  ErrorDocument 404 /error404.php
</ifModule>

Это первый шаг к созданию более безопасного GET-запроса.Например, это пройдет:

www.mywebsite.com/proyecto/id/1/

В то время как попытка злоумышленника потерпит неудачу:

www.mywebsite.com/proyecto/id/%5Cxbf%5Cx27%20OR%201%3D1%20%2F*

Это пройдет \xbf\x27 OR 1=1 /*к вашему сценарию и может быть потенциально опасным.Поскольку это значение не от 0 до 9, условие перезаписи не должно выполняться.

В вашем запросе SQL.Это следующий уровень защиты, мы хотим убедиться, что мы используем только целочисленный тип переменной.Для этого мы хотим каким-то образом очистить входные данные из браузера.Более чем один способ сделать это.Мы можем сделать это перед передачей переменной в запрос или использовать функции PDO.

Пример 1. Сантифицировать переменную перед запросом

Вместо использования:

$valorid = $_GET['id'];

Если все, что введено как id, будет помещено в переменную, мы можем сделать так, чтобы оно было числом.Что-то вроде:

$valorid = sprintf("%d", $_GET['id']);

Это менее используемый метод, поскольку он в основном форматирует переменную в цифру.

Пример 2. Использование подготовленного оператора PDO

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

Примите во внимание следующее:

$conn = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8",$username, $password);
$stmt = $conn->prepare('SELECT * FROM grafica WHERE id = ? LIMIT 1');
if ($stmt->execute(array($_GET['id']))) {
  while ($row = $stmt->fetch()) {
    // Do the needful
  }
}

Это считается лучшим методом.Во-первых, мы улучшили оператор с LIMIT 1, чтобы обеспечить только 1 результат.Во-вторых, PDO подготовит инструкцию и обеспечит обработку, комментирование или скрытие всех потенциально опасных элементов.

Подготавливает инструкцию SQL для выполнения методом PDOStatement :: execute ().Оператор SQL может содержать ноль или более маркеров параметров с именами (: name) или вопросительным знаком (?), Для которых действительные значения будут подставляться при выполнении инструкции.Вы не можете использовать маркеры параметров как именованных, так и вопросительных знаков в одной и той же инструкции SQL;выберите один или другой стиль параметра.Используйте эти параметры для привязки любого пользовательского ввода, не включайте пользовательский ввод непосредственно в запрос.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...