Всем привет. Я сделал личный кабинет. Туда я захожу, просматриваю данные из базы, удяляю.
Сделал я его с помошью скрипта Admin-login-only. Скрипт работает с сессиями.
Лог и пас храняться в файлике secret.php. Перед началом кода страницы которую я хочу защитить ставитсявот такой код.
PHP |
<?php require_once("adminOnly.php"); |
Формы отправки данных в базу защищены вырезкой тегов. Файл с логом и пасом к MySQL тоже просто лежит в папке на сайте и вставляется в страницы с помощью include.
Admin-login-only могу выложить.
register_globals=on
всё что идёт в базу из форм получаю $_GET.
Это нормальная защита?)
Спустя 24 минуты, 33 секунды (28.07.2009 - 18:46) Sylex написал(а):
ANG3
выкладывай свой код... доклад не очень твой
Спустя 16 минут, 24 секунды (28.07.2009 - 19:02) ANG3 написал(а):
Вот gполучаю из формы
PHP |
<?php include('mysql.php') // мой файл с логином и пасом ?>
<?php $name = trim(strip_tags($_POST['name'])); if ( strlen($name)>3 ) { |
Вот ещё
PHP |
$id=$_GET['id']; mysql_query ("SET NAMES `cp1251`");
$query="SELECT * FROM `order` WHERE `id`='$id'"; // и так далее |
Admin-Login-only
Выкладываю содержимое файла который выключается при заходе на страницу которую нужно защитить. Включается он так.
PHP |
<?php require_once("adminOnly.php"); |
Сам скрипт из файла AdminOnly.php
PHP |
<?php session_start(); if( (!isset($_SESSION['adminUser'])) || (!isset($_SESSION['adminPassword'])) ) { include_once("adminLogin.php"); exit; } // requires for multi applications inter-operability using same admin-Login-Only module if(file_exists("util.php")) { // phpyellow admin user and password file require_once("util.php"); } if(file_exists("mysetup.php")) { // give admin user and password file require_once("mysetup.php"); } if(file_exists("secret.php")) { // admin-Login-Only admin user and password file require_once("secret.php"); } if(file_exists("db_x.php")) { // all other admin user and password file require_once("db_x.php"); } if(file_exists("configure.php")) { // not commented require_once("configure.php"); } /* adminOnly.php if the session variables are not set or are incorrect values then present the login screen */ if( ($_SESSION['adminUser'] != ADMINUSER) || ($_SESSION['adminPassword'] != ADMINPASSWORD) ) { //header("Location: adminLogin.php"); include_once("adminLogin.php"); exit; }else{?> <table> <tr> <td width=32><a href="adminLogOut.php"><img src="appimage/icons/icon_logout.gif" width="32" height="32" border=0 alt="Logout"></a></td> <td width=32><a href="<?php echo ADMINHOME;?>"><img src="appimage/icons/icon_admin.gif" width="32" height="32" border=0 alt="Admin"></a></td> <td width="100%" align="center"><div style="background-color:gold;font-size:xx-small;font-style:italic;">Page secured by <a href="http://www.globalissa.com" target="_blank">admin-Login-Only</a> | <a href="http://www.globalissa.com/checkversion/index.php?productname=admin-Login-Only&installversion=2.1" target="_blank">Check this version 2.1</a></div></td> <td width=32><a href="<?php echo ADMINHOME;?>"><img src="appimage/icons/icon_admin.gif" width="32" height="32" border=0 alt="Admin"></a></td> <td width=32><a href="adminLogOut.php"><img src="appimage/icons/icon_logout.gif" width="32" height="32" border=0 alt="Logout"></a></td> </tr> <tr> <td style="font-size:x-small;"><a href="adminLogOut.php">Logout</a></td> <td style="font-size:x-small;"><a href="<?php echo ADMINHOME;?>">Admin</a></td> <td> </td> <td style="font-size:x-small;"><a href="<?php echo ADMINHOME;?>">Admin</a></td> <td style="font-size:x-small;"><a href="adminLogOut.php">Logout</a></td> </tr> </table> <?php } |
Вот сылка на весь
скрипт + описание его:
http://www.woweb.ru/load/94-1-0-3138З.Ы.
Чем $_POST отличается от $_GET? В моём коде и то и то выполняет одинаковую функцию.
Спустя 2 минуты, 21 секунда (28.07.2009 - 19:05) Kuliev написал(а):
ANG3
PHP |
$id = isset($_GET['id']) ? $_GET['id'] : null; |
Спустя 9 минут, 3 секунды (28.07.2009 - 19:14) Sylex написал(а):
Цитата (ANG3 @ 28.07.2009 - 22:02) |
$id=$_GET['id']; mysql_query ("SET NAMES `cp1251`");
$query="SELECT * FROM `order` WHERE `id`='$id'"; // и так далее |
это небезопасно
Спустя 19 минут, 52 секунды (28.07.2009 - 19:34) ANG3 написал(а):
Как безопасно? хотябы намекните.
Цитата |
PHP | $id = isset($_GET['id']) ? $_GET['id'] : null; |
|
Распишите смысл плз.
Спустя 4 минуты, 32 секунды (28.07.2009 - 19:38) Kuliev написал(а):
ANG3
если переменная существует то она то пишем ее в $id если нет то в $id пишем NULL
Спустя 21 минута (28.07.2009 - 19:59) ANG3 написал(а):
Цитата |
если переменная существует то она то пишем ее в $id если нет то в $id пишем NULL |
А как она может не существовать? Если кто-нибудь изменит строку? У меня там Id. Если его изменить то ты попадёшь или не туда или на страницу где показан только несуществующиий id полученый GET. Я вставил этот код и ввёл сначала несуществующий id, затем 0 и пустоту. Мне такой результат и выводит.
Отправляю
PHP |
while ($row=mysql_fetch_array ($result)) {
$name=$row['name']; $date=$row['date']; $id=$row['id']; $link = "<a href='list2.php?id=".$id."'>".$word."</a>"; |
Получаю
PHP |
<?php $id = isset($_GET['id']) ? $_GET['id'] : null; mysql_query ("SET NAMES `cp1251`");
$query="SELECT * FROM `order` WHERE `id`='$id'"; |
Ничего не меняется, как бы я строку не изменял.
Ничего не понимаю.
Спустя 4 минуты, 52 секунды (28.07.2009 - 20:04) ИНСИ написал(а):
сделай хотя бы так:
PHP |
if(isset($_GET['id'])) { $id = htmlspecialchars(stripslashes($_GET['id'])); } |
и
PHP |
mysql_query ("SET NAMES `cp1251`"); |
замени на, в файле .htaccess
AddDefaultCharset Windows-1251
Спустя 11 минут, 58 секунд (28.07.2009 - 20:16) ANG3 написал(а):
Спс. htmlspecialchars - убирает какие-то хтмл теги, а stripslashes кавычки.
Я правильно понял?
PHP |
trim(strip_tags($_GET['id'])); |
Можно его использовать тут? Чем он лучше или хуже? Я использовал такой код при отправке заявки в базу.
Спустя 5 минут, 13 секунд (28.07.2009 - 20:21) ИНСИ написал(а):
попробуй так:
PHP |
while($row = mysql_fetch_array($result)) { if(!isset($_POST['id'])) { $_POST['id'] = $id = $myrow_mail["id"]; } if(!isset($_POST['date'])) { $_POST['date'] = $date = $myrow_mail["date"]; } if(!isset($_POST['name'])) { $_POST['name'] = $name = $myrow_mail["name"]; } $link = "<a href='list2.php?id=".$id."'>".$word."</a>"; } |
PHP |
if(isset($_GET['id'])) { $id = htmlspecialchars(stripslashes($_GET['id'])); } mysql_query ("SET NAMES `cp1251`"); $query="SELECT * FROM `order` WHERE `id`='$id'"; |
Спустя 5 минут, 4 секунды (28.07.2009 - 20:26) Kuliev написал(а):
Цитата (welbox2 @ 28.07.2009 - 22:21) |
попробуй так:
PHP | while($row = mysql_fetch_array($result)) { if(!isset($_POST['id'])) { $_POST['id'] = $id = $myrow_mail["id"]; } if(!isset($_POST['date'])) { $_POST['date'] = $date = $myrow_mail["date"]; } if(!isset($_POST['name'])) { $_POST['name'] = $name = $myrow_mail["name"]; } $link = "<a href='list2.php?id=".$id."'>".$word."</a>"; } |
PHP | if(isset($_GET['id'])) { $id = htmlspecialchars(stripslashes($_GET['id'])); } mysql_query ("SET NAMES `cp1251`"); $query="SELECT * FROM `order` WHERE `id`='$id'"; |
|
Нука растолкуй что у тебя там в цикле происходит
Спустя 5 минут, 29 секунд (28.07.2009 - 20:32) ANG3 написал(а):
Не понял.
Вот я создаю список с сылкой.
PHP |
<?php echo '<table class="table" width="70%" border="1" align="center"> <tr> <td width="10%" align="center" valign="middle"><strong>ID</strong></td> <td width="10%" align="center" valign="middle"><strong>Дата</strong></td> <td width="80%" align="center" valign="middle"><strong>Название организации</strong></td> </tr>'; $word = "просмотреть"; mysql_query ("SET NAMES `cp1251`");
$query = "SELECT * FROM `order`"; $result=mysql_query($query) or die(mysql_error());
while ($row=mysql_fetch_array ($result)) {
$name=$row['name']; $date=$row['date']; $id=$row['id']; $link = "<a href='list2.php?id=".$id."'>".$word."</a>"; echo '<tr> <td height="23" align="center" valign="middle">'.$id.'</td> <td align="center" valign="middle">'.$date.'</td> <td align="center" valign="middle">'.$name.'<br><br>'.$link.'</td> </tr>'; }
|
Прохожу по сылке, получаю подробное описание.
PHP |
<?php $id=$_GET['id']; mysql_query ("SET NAMES `cp1251`");
$query="SELECT * FROM `order` WHERE `id`='$id'"; $result=mysql_query($query) or die(mysql_error()); while ($row=mysql_fetch_array ($result)) { $name=$row['name']; $email=$row['email']; $tel=$row['tel']; $address=$row['address']; $order=nl2br($row['order']); $date=$row['date']; $inn=$row['inn'];
} echo // использую переменные полученые из базы |
Спустя 47 секунд (28.07.2009 - 20:33) Sylex написал(а):
Цитата (ANG3 @ 28.07.2009 - 22:34) |
Как безопасно? хотябы намекните. |
существует возможность SQL-инъекции.
Данные пришедшие от пользователя нужно ВСЕГДА обрабатывать mysql_real_escape_string();http://phpfaq.ru/slashes Спустя 2 минуты, 12 секунд (28.07.2009 - 20:35) Kuliev написал(а):
ANG3
PHP |
while ($row = mysql_fetch_assoc($result)) { echo "<a href='list2.php?id=".$row['id']."'>".$word."</a>"; } |
Спустя 32 минуты, 32 секунды (28.07.2009 - 21:07) ANG3 написал(а):
PHP |
$id=mysql_real_escape_string(trim(strip_tags($_GET['id']))); mysql_query ("SET NAMES `cp1251`");
$query="SELECT * FROM `order` WHERE `id`='$id'"; |
так пойдёт?
Спустя 9 минут, 55 секунд (28.07.2009 - 21:17) Kuliev написал(а):
ЖЕСТЬ
Спустя 9 минут, 23 секунды (28.07.2009 - 21:27) ANG3 написал(а):
А ещё у меня на хостинге magic_quotes_gpc= on
Это плохо или хорошо?