[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: безопасное использование $_POST
fantua
Возникла необходимость передачи данных через post, хотел детальное узнать о безопасном использовании. Вот что нагуглил:

- проверка HTTP_REFERER
- использование сессий
session_start();
if ($_POST["Submit"]){
if (!preg_match("/^(http://".$_SERVER["HTTP_HOST"]."/)(.*?)+$/",$_SERVER["HTTP_REFERER"],$matches)){
die('<b>Access Denied</b>');
}
if ($_SESSION["verify"]<>$_POST["verify"]){
die('<b>Access Denied</b>');
}
unset($_SESSION["verify"]);
}

Также нужно передавать данные и записывать их в бд, тут как я понял нужно использовать белые списки (preg_match()), strip_tags(), htmlspecialchars(), trim(), mysql_real_escape_string().

Но не знаю как мне это все использовать, не можете подсказать как это все связать, чтобы была безопасная форма?
fantua
забыл написать, сессию в форме использую так:
<form method="post" action="test_post.php">

<?php

$_SESSION["verify"]=md5(uniqid(rand(),1));
echo "<input type='hidden' name='verify' value='{$_SESSION['verify']}' />";
?>
<input
type="text" name="text" class="text" />

<input
type="submit" value="Save Changes" class="button green" />
<input
type="reset" value="Cancel Changes" class="button red" />
</form>
vagrand
fantua
Перед записью в БД обрабатывай данный при помощи: mysql_real_escape_string() или addslashes()
Перед выводом на страницу обрабатывай при помощи: htmlspecialchars()
Почитай так же про csrf-атаки и способы борьбы с ними

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
fantua
Теперь эта форма будет безопасной?

Свернутый текст
<form method="post" action="test_post.php">

<?php

$_SESSION["verify"]=md5(uniqid(rand(),1));
echo "<input type='hidden' name='verify' value='{$_SESSION['verify']}' />";
?>
<input
type="hidden" name="id" value="<?php $id ?>" />
<input
type="text" name="test" value="<?php htmlspecialchars($test) ?>" />

<input
type="submit" value="Save Changes" class="button green" />
<input
type="reset" value="Cancel Changes" class="button red" />
</form>


Файл test_post.php:
Свернутый текст
<?
session_start();
if ($_POST["Submit"]){
if (!preg_match("/^(http://".$_SERVER["HTTP_HOST"]."/)(.*?)+$/",$_SERVER["HTTP_REFERER"],$matches)){
die('<b>Access Denied</b>');
}
if ($_SESSION["verify"]<>$_POST["verify"]){
die('<b>Access Denied</b>');
}
unset($_SESSION["verify"]);
}

require( "./configuration.php" );
include( "./include.php" );

$id= intval($_POST['id']);

$myrow = mysql_query( "SELECT `test` from `table` WHERE `id` = '".mysql_real_escape_string($id)."' LIMIT 1" );
if(!mysql_num_rows($myrow)){
die('<b>Access Denied</b>');
} else {
mysql_fetch_assoc($myrow);

$test= trim(mysql_real_escape_string(substr($_POST["test"], 0, 64)));

mysql_query("UPDATE `server` SET `test` = '$test' WHERE `id` = '$id' LIMIT 1");

header( "Location: test.php?id=".$id."");
}

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.