В моем профиле profile.php отображаются все сообщения пользователя, комментарии, изображения. Если пользователь хочет удалить, он отправляет идентификатор публикации в файл remove.php, так что это как remove.php? Action = removeposting & posting_id = 2. Если они хотят удалить картинку, это remove.php? Action = removepicture & picture_id = 1.
Используя данные получения, я делаю запрос к базе данных для отображения информации, которую они хотят удалить, и если они хотят ее удалить, они нажимают «да». Таким образом, данные удаляются через $ POST NOT $ GET, чтобы предотвратить подделку запросов на межсайтовый запрос.
Мой вопрос: как я могу убедиться, что GET - это не какой-то код javascript, sql-инъекция, которая меня испортит.
вот мой remove.php
//how do I make $action safe?
//should I use mysqli_real_escape_string?
//use strip_tags()?
$action=trim($_GET['action']);
if (($action != 'removeposting') && ($action != 'removefriend')
&& ($action != 'removecomment'))
{
header("Location: index.php");
exit();
}
if ($action == 'removeposting')
{
//get the info and display it in a form. if user clicks "yes", deletes
}
if ($action =='removepicture')
{
//remove pic
}
Я знаю, что не может быть 100% безопасны, но то, что некоторые общие средства защиты можно использовать.
EDIT
Do this to prevent xss
$oldaction=trim($_GET['action']);
$action=strip_tags($oldaction);
Then when I am 'recalling' the data back via POST, I would use
$posting_id = mysqli_real_escape_string($dbc, trim($_POST['posting_id']));
if ($action == 'removeposting')
{
//get the posting id from the user
$getposting_id = htmlspecialchars(trim($_GET['posting_id']));
//basic checks for the posting id
if (empty($getposting_id)){
//header ("Location: index.php");
echo '<p>Sorry, no posting was specified for removal.</p>';
exit();
}
if (!is_numeric($getposting_id))
{
echo "Not an integer";
exit();
}
//Also have check to see if the posting_id is the user's. If so, can delete
Почему бы просто не использовать POST для всего? – Smandoli
Это может быть возможность! – ggfan
Вы все равно должны относиться к '$ _POST' так же небезопасно, как' $ _GET'. Таким образом, вы защищены независимо от того. –