сессия — PHP запрещает ввод URL для удаления строки в базе данных

Я работаю над сайтом блога, где идея заключается в том, что текущий пользователь, вошедший в систему, может редактировать и удалять свои собственные сообщения. Я наконец получил это на работу, но Мой вопрос заключается в том, как я могу предотвратить, чтобы пользователь мог записать следующие данные в URL и выполнить те же действия, что и мое действие delete.php.

(Пример) Ручной ввод URL с topic_id:

/delete.php?del=133

Кто-нибудь знает, как я могу редактировать свой существующий код или знаю лучшее решение проблемы, я буду очень благодарен!

Вот как выглядит мой код:

profile.php:

введите описание изображения здесь

if (@$_GET['id']) {
$check_d = mysql_query("SELECT * FROM users WHERE id ='".$_GET['id']."'");

while ($row_d = mysql_fetch_assoc($check_d)) {
echo "<div class='spacer'></div><h2 class='headertext'>Inlägg skapade av : ".$row_d['username']."</h2>";
$check_u = mysql_query("SELECT * FROM topics WHERE topic_creator='".$row_d['username']."' ORDER BY topic_id DESC");
while ($row_u = mysql_fetch_assoc($check_u)) {
$id = $row_u['topic_id'];
echo "<tr>";
echo "<td class='postmain'><a href='topic.php?id=$id' class='links'>".$row_u['topic_name']."<br /></a></td>";
echo "<td class='postmain'><p class='text'>".$row_u['topic_creator']."</p><br /></td>";
echo "<td class='postmain'><p class='text'>".$row_u['date']."</p><br /></td>";

if($_SESSION['username'] === $row_u['topic_creator']) {
echo "<td class='postmain'><a href='edit.php?edit=$id'><button>Redigera</button></a>";
echo "<a href='delete.php?del=$id'><button>Ta bort</button></a></td>";
}
echo "</tr>";
}
}
}

Выделенный код показывает, что только текущий сеанс (пользователь), создавший сообщение, может редактировать и удалять свои собственные сообщения.

Delete.php:

введите описание изображения здесь

if (isset($_GET['del'])) {

//getting id of the data from url
$id = $_GET['del'];

//deleting the row from table
$sql = "DELETE FROM topics WHERE topic_id='$id'";
$res = mysql_query( $sql );

//redirecting to the display page
header("Location:admin.php");

}

0

Решение

Использование функции isset является решением здесь. Функция isset проверит, нажал ли пользователь ссылку «удалить / изменить» или нет (то есть он вставил delete.php прямо в ссылку). Таким образом, ваш код будет выполняться только тогда, когда пользователь нажимает на ссылку.

if (isset($_GET['del']))
{
// your profile.php code here
}
else
{
// error message
}
2

Другие решения

Вы можете использовать то же самое $_SESSION логика, чтобы обеспечить доступ к delete.php имеет соответствующие разрешения.

if (isset($_GET['del'])) {

//getting id of the data from url
$id = $_GET['del'];

// Get the author for the specified post to ensure they are permitted to do so
// TODO

// Check that the author is the same as the $_SESSION user
if($_SESSION['username'] === $postAuthor) {
//deleting the row from table - FIX THIS (see below)
$sql = "DELETE FROM topics WHERE topic_id='$id'";
$res = mysql_query( $sql );
} else {
// User is not authorized, create error handling
// TODO
}

//redirecting to the display page
header("Location:admin.php");
}

Unrelated, остерегайтесь внедрения SQL. Бобби Столы хорошее руководство, и вы не должны использовать mysql_ функции и должны использовать подготовленные заявления.

-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector