|
|
|
| а только через переадресацию или после заполнения формы как сделать? | |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 13:05)
| | Отдавать файл скриптом, а уж перадресация или форма, это уже второе. Ищите в этом разделе, примеров много, зачем повторять. | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 13:08)
| | а по каким словам искать )) | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 13:08)
| | сделал так
Можно в главной странице, перед вызовом конструкций include, объявить константу
<?php
define("INCLUDE", 1);
?>
а в начале каждого включаемого файла проверять определена константа или нет.
<?php
if(!defined("INCLUDE")) exit();
?>
не работает
так тоже
в индекс.пхп перед инклудом пишем.
define ('MAIN', TRUE);
в инклуденом файле в самом начале пишем
if (!defined('MAIN')) die ('Wrong url'); -
при любом раскладе запрещает доступ к странице и все (( | |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 13:39)
| | Че к чему? :) Вас что интересует, как запретить прямой доступ к файлу, или как проверить, что условие к доступу получено? | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 13:58)
| | Меня интересует 2 вопроса
1. запрет на прямой доступ к файлу
2. запрет на прямой доступ к файлу, который обрабатывает и записывает данные из заполненной формы, как я понял это разные функции. | |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 14:13)
| | 1. Запрет на прямой доступ (получение), например, для скачивания - отдавать файл посредством скрипта, а не по прямой ссылке, например.
2. Если это и есть файл на который вы ограничиваете доступ, и доступ для скачивание, то см. 1.
Вы лучше "на пальцах расскажите" чего хотите, или покажите то, что у вас есть, но не получается. | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 14:35)
| | есть файл index.php в нем есть форма
<form name="message" action="insert.php" method="post">
форма
</form>
|
при заполнении формы происходит переадресация в файл insert.php, где происходит обработка данных и запись их в БД.
я хочу запретить прямой доступ в файл insert.php, только из index.php, иначе пишутся пустые поля при непосредственном обращении к нему | |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 14:45)
| | Ну юмор :) Форма в любом случае должна обращаться к файлу обработчику, в данном случае это insert.php. Его не зачем скрывать (хотя при некоторых условиях, можно и обойти это). Если хотите через index.php, тоже нет проблем, проверяйте в index.php, если пришел запрос от формы, подключайте файл обработчик, или переадресовывайте на него, что в общем не так важно. А поля пустые не потому, что к этому файлу идет обращение, а потому, что вы неверно обрабатываете и запысываете данные из формы. | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 15:00)
| | спасибо, а как правильно обработать поля?
я делаю так
<?php
include "db/dbconnect.php";
$name = $_POST['name'];
$name = htmlspecialchars(stripslashes($name));
$name = str_replace("'","`",$name);
$city = $_POST['city'];
$city = htmlspecialchars(stripslashes($city));
$city = str_replace("'","`",$city);
$email = $_POST['email'];
$message = $_POST['message'];
$message = htmlspecialchars(stripslashes($message));
$message = str_replace("'","`",$message);
$d_m = date('c');
$insert_query="INSERT into guestbook values(
'',
'".$name."',
'".$city."',
'".$email."',
'".$message."',
'".$d_m."',
'',
''
)";
if (mysql_query($insert_query))
{
if($sendmail)
{
$theme = "Новое сообщение на сайте!";
$letter = "$message";
mail($adminmail, $theme, $letter, "Content-type:text/plain; Charset=windows-1251\r\n");
}
echo "Данные успешно добавлены! Страница будет перезагружена через 5 секунд!" ;
echo "<br /><a href='guestbook.php'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
echo "<meta http-equiv='refresh' content='5; url=guestbook.php'>";
}
else
{
echo "Произошла ошибка при отправке Вашего сообщения!<br />";
echo "<a href='guestbook.php'>Вернуться!</a>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 15:05)
| | Во-первых, чтобы не получать и не записывать пустого в базу, нужно проверять - заполены ли вообще поля. Во-вторых, нужно проверять поля на ошибки, поле адреса, это уж обязательно! В третьих - при наличии ошибок ввода пользователем, нужно сообщать ему об этом, возвращая ему форму и сообщения об ошибках. И в четвертых - так почту не отправляют (для русской кодировки). | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 15:43)
| | >Во-первых, чтобы не получать и не записывать пустого в базу, нужно проверять - заполены ли вообще поля.
я для этого взял скрипт на AJAX jQuery plugin: Validation верхнюю
он пока не заполнишь корректно не отправит форму
>Во-вторых, нужно проверять поля на ошибки, поле адреса, это уж обязательно!
на какие ошибки?
>В третьих - при наличии ошибок ввода пользователем, нужно сообщать ему об этом, возвращая ему форму и сообщения об ошибках.
это делает скрипт сразу же при заполнении
верхняя форма попробуйте пустые поля отправить
И в четвертых - так почту не отправляют (для русской кодировки).
а как я спрашивал здесь мне сказали так, по крайней мере она уходит и приходит
я включил проверку IF($_SERVER['REQUEST_METHOD']=='POST')
и вроде пустые поля теперь не пишутся - я правильно сделал? | |
|
|
|
|
 122.5 Кб |
|
|
для: Bvz
(11.12.2008 в 16:01)
| | 1. Что-то я у вас не наблюдаю работы AJAX, ну коли проверяте, и не допускаете полей пустых, то не видно условия, что все ОК и пишем в базу. В вашем примере - взяли, от-htmlspecialchars-сили, заменили кавычки и айда на запись, и где же проверка? Кстати, а так ли нужен htmlspecialchars перед записью в базу? Как в прочем и о кавычках.
2. А если я вам пришлю адрес as karabas@as, на этот адрес прийдет письмо?
ПОЧТА! То что отправляется ваша почта, это еще совсем не означает, что ее прочитает получатель! IF (mail(...)) echo "OK", это еще не означает, что действительно ОК! Почитайте о почте. | |
|
|
|
|
 7 Кб |
|
|
для: sim5
(11.12.2008 в 16:20)
| | >1. Что-то я у вас не наблюдаю работы AJAX, ну коли проверяте, и не допускаете полей пустых, то не видно условия, что все ОК и пишем в базу.
вот index.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link rel="stylesheet" type="text/css" media="screen" href="css/guestbook.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/screen.css" />
<script src="script/jquery.js" type="text/javascript"></script>
<script src="script/jquery.validate.js" type="text/javascript"></script>
<script src="script/cmxforms.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#commentForm").validate();
});
</script>
<style type="text/css">
#commentForm { width: 500px; background-color: #044f9b; padding-left: 10px;}
#commentForm label { width: 250px; }
#commentForm label.error, #commentForm input.submit { margin-left: 253px; }
</style>
<title></title>
</head>
<body>
<div class="content">
<?php
include "db/dbconnect.php";
$num = 5;
$page = $_GET['page'];
$result = @mysql_query("SELECT COUNT(*) FROM guestbook");
$posts = @mysql_result($result,0);
if(!isset($posts) || $posts == 0) {
echo "Íåò ñîîáùåíèé";
}
else {
$total = intval(($posts - 1) / $num) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$result = @mysql_query("SELECT * FROM guestbook LIMIT $start, $num");
while ( $postrow[] = @mysql_fetch_array($result));
for($i = 0; $i < $num; $i++)
{
if (isset($postrow[$i]['id_guestbook'])) {
echo "<table class=\"message\" bgcolor=\"#044f9b\" width=\"100%\" cellpadding=\"10px\" cellspacing=\"0\" border=\"0\" >
<tr><td bgcolor=\"#024181\" id=\"name\"><strong>èìÿ: </strong><i>".$postrow[$i]['name']."</i></td></tr>
<tr><td id=\"city\"><strong>ãîðîä: </strong><i>".$postrow[$i]['city']."</i></td></tr>
<tr><td id=\"message\"><strong>ñîîáùåíèå: </strong><br /><i>".$postrow[$i]['message']."</i></td></tr>
<tr><td id=\"d_m\"><strong>îò: </strong><br /><i>".$postrow[$i]['date_message']."</i></td></tr>
<tr><td id=\"answer\"><strong>îòâåò: </strong><br /><i>".$postrow[$i]['answer']."</i></td></tr>
<tr><td id=\"d_a\"><strong>îò: </strong><br /><i>".$postrow[$i]['date_answer']."</i></td></tr>
</table>";
}
}
echo "</div>
<div align=\"center\" class=\"pag\">";
if ($page != 1) $pervpage = '<a class="pag" href= ./guestbook.php?page=1><<</a>
<a class="pag" href= ./guestbook.php?page='. ($page - 1) .'><</a> ';//ìåíÿåì íà íóæíûå ñòðàíèöû
if ($page != $total) $nextpage = ' <a class="pag" href= ./guestbook.php?page='. ($page + 1) .'>></a>
<a class="pag" href= ./guestbook.php?page=' .$total. '>>></a>';//ìåíÿåì íà íóæíûå ñòðàíèöû
if($page - 2 > 0) $page2left = ' <a class="pag" href= ./guestbook.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> ';//ìåíÿåì íà íóæíûå ñòðàíèöû
if($page - 1 > 0) $page1left = ' <a class="pag" href= ./guestbook.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> ';//ìåíÿåì íà íóæíûå ñòðàíèöû
if($page + 2 <= $total) $page2right = ' <a class="pag" href= ./guestbook.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';//ìåíÿåì íà íóæíûå ñòðàíèöû
if($page + 1 <= $total) $page1right = ' <a class="pag" href= ./guestbook.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';//ìåíÿåì íà íóæíûå ñòðàíèöû
echo $pervpage.$page2left.$page1left.'<b> ' .$page. ' </b>'.$page1right.$page2right.$nextpage;//ìåíÿåì íà íóæíûå ñòðàíèöû
}
?>
</div>
<div class="content">
<form class="cmxform" id="commentForm" neme="guestbook" method="post" action="insert.php">
<p align="center">Çàäàéòå ñâîé âîïðîñ:</p>
<p>
<label for="cname">Èìÿ (îáÿçàòåëüíî)</label>
<input id="cname" name="name" class="required" minlength="2" />
</p>
<p>
<label for="ccity">Ãîðîä (îáÿçàòåëüíî)</label>
<input id="ccity" name="city" class="required" minlength="2" />
</p>
<p>
<label for="cemail">E-Mail (îáÿçàòåëüíî)</label>
<input id="cemail" name="email" class="required email" />
</p>
<p>
<label for="ccmessage">Âàø âîïðîñ (îáÿçàòåëüíî)</label>
<textarea id="cmessage" name="message" class="required" minlength="22" ></textarea>
</p>
<p>
<input class="submit" type="submit" value="Îòïðàâèòü"/>
</p>
</form>
</div>
</body>
</html>
|
>В вашем примере - взяли, от-htmlspecialchars-сили, заменили кавычки и айда на запись, и где же проверка?
проверка чего?
Кстати, а так ли нужен htmlspecialchars перед записью в базу? Как в прочем и о кавычках.
насколько я понял что нужен, эту идею я взял здесь на форуме и в скрипте гостевой книги, который рекомендуют, если нет поясните за тем я здесь
>2. А если я вам пришлю адрес as karabas@as, на этот адрес прийдет письмо?
>
нет не придет, здесь Вы правы!
>ПОЧТА! То что отправляется ваша почта, это еще совсем не означает, что ее прочитает получатель! IF (mail(...)) echo "OK", это еще не означает, что действительно ОК! Почитайте о почте.
а вто и insert.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<link rel="stylesheet" type="text/css" media="screen" href="css/guestbook.css" />
<title>Гостевая книга</title>
</head>
<body>
<?php
// подключаемся к БД
include "db/dbconnect.php";
// проверяем на прямой доступ
// если данные пришли из формы обрабатываем их
if($_SERVER['REQUEST_METHOD']=='POST') {
// обрабатываем введеные данны для защиты от нежелательных скриптов
$name = $_POST['name'];
$name = htmlspecialchars(stripslashes($name));
$name = str_replace("'","`",$name);
$city = $_POST['city'];
$city = htmlspecialchars(stripslashes($city));
$city = str_replace("'","`",$city);
$email = $_POST['email'];
$message = $_POST['message'];
$message = htmlspecialchars(stripslashes($message));
$message = str_replace("'","`",$message);
$d_m = date('c');
// формируем sql запрос
$insert_query="INSERT into guestbook values(
'',
'".$name."',
'".$city."',
'".$email."',
'".$message."',
'".$d_m."',
'',
''
)";
// записываем полученные данные в БД
if (mysql_query($insert_query))
{
// отсылаем письмо администратору о добавлении нового сообщения
if($sendmail)
{
$theme = "Новое сообщение на сайте!";
$letter = "$message";
mail($adminmail, $theme, $letter, "Content-type:text/plain; Charset=windows-1251\r\n");
}
// сообщаем о добавлении нового сообщения и передаресуем пользователя на страницу гостевой книги
echo "Данные успешно добавлены! Страница будет перезагружена через 5 секунд!" ;
echo "<br /><a href='guestbook.php'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
echo "<meta http-equiv='refresh' content='5; url=guestbook.php'>";//меняем на нужную страницу
}
// при ошибке обработки и записи в БД сообщаем пользователю
else
{
echo "Произошла ошибка при отправке Вашего сообщения!<br />";
echo "<a href='guestbook.php'>Вернуться!</a>";//меняем на нужную страницу
}
}
// проверяем на прямой доступ
// если прямое обращение к файлу переадресовываем на страницу сообщений
else {
echo "Вы не ввели данные! Страница будет перезагружена через 5 секунд!" ;
echo "<br /><a href='guestbook.php'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
echo "<meta http-equiv='refresh' content='5; url=guestbook.php'>";//меняем на нужную страницу
}
?>
</body>
</html>
|
прикрепляю сам скрипт | |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 16:36)
| | Я конечно же не буду разбираться со всеми вашими скриптами, мне просто некогда это делать. Я не могу грамотно и красиво растолковать вам все о MySQL как это может Trianon (надеюсь, что он сделает для вас это), но скажу кратко - база, как это вам не покажется странным, может содеражать в себе какую угодно "крамолу", а уже при выводе из базы надо применить htmlspecialchars, а перед записью в нее - mysql_escape_string().
В базу писать нужно только тогда, когда все проверено и не содержит ошибок, а у вас она происходит по условию - if($_SERVER['REQUEST_METHOD']=='POST')... Ну как мне вам не отослать в вашу таблицу кучу пустых полей? Не вижу я тут гарантированной проверки.
А насчет почты - читайте, я прикрепил для вас. | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 17:10)
| | спасибо! вот теперь я понимаю смысл Ваших последних сообщений, т.к. Вы объяснили зачем )))
а как насчет вредоносного кода, он не повредит, если я буду делать как Вы сказали? | |
|
|
|
|
|
|
|
для: Bvz
(11.12.2008 в 17:17)
| | Какого "вредоносного кода"? Ну если даже это "страшный" JS, то запишите его "как есть" в базу, а при выводе на страницу примените htmlspecialchars(). Будет работать JS-скрипт у вас? Код выполняется на странице, а не в базе. | |
|
|
|
|
|
|
|
для: sim5
(11.12.2008 в 17:21)
| | ну начитался статей про xss-атаки вот и сделал ))
Безопасное программирование на PHP | |
|
|
|
|