Возникла необходимость передачи
данных через 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().
Но не знаю как мне это все использовать, не можете подсказать как это все связать, чтобы была безопасная форма?
забыл написать, сессию в форме использую так:
<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
9.12.2012 - 09:38
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, фрагменты.
Теперь эта форма будет безопасной?
<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."");
}
?>