| |
|
|
| | Есть такой скрипт - Dating Agent 4.7.1 - нуленых версий полно в интернет. Так уже получилось, что мне нужен именно этот скрипт, хотя он и не особо функциональный. Вопрос такой - может ли кто-нибудь переделать этот скрипт, чтобы он работал с register_globals off и сделать в нем стандартную фильтрацию ввода и вывода данных. Есс-но за деньги. Или хотя бы переработать 6 файлов, а именно, фал register.php, search.php, manage_pictures.php, mem.php, agenda.php и messages.php. Там есть файлы tagster.php и mysql.lib, в которых прописаны функции в папке lib - только я не особо вижу, чтобы в сайте эти функции где-либо были задействованы. Я сама пыталась это сделать, но у меня ничего не выходит - вроде все делаю, проверяю скрипт на уязвимости сканнером (acunetix vulnerubility scanner) - и показывате тучу msq -injections. В общем сама я уже руки опустила, не могу понять, то ли я такая тупая, то ли этот сканнер просто придирается (что, впрочем тоже допустимо, так как я этим сканнером проверяла скрипты, которые предлагаются на php.su в качестве так сказать образцовых - и в них он тоже массу уязвимостей находит). В общем, если кто-то за это берется - оплачу работу с удовольствием. | |
| |
|
|
| |
|
|
| |
для: zeta777
(27.11.2007 в 18:34)
| | |
<?php
foreach($_REQUEST as $k=>$v)
{
$$k=$v;
}
?>
|
или даже так
<?php
function register_globals_array($array)
{
foreach($array as $key => $value)
if(preg_match("/[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*/", $key))
$GLOBALS[$key] = $value;
}
function register_globals()
{
register_globals_array($_GET);
register_globals_array($_POST);
register_globals_array($_COOKIE);
register_globals_array($_ENV);
register_globals_array($_SERVER);
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: mihdan
(28.11.2007 в 10:36)
| | | Спасибо. В общем и целом понятно :), а можно поподробнее, с комментариями?
Например, a-zA-Z_x7f-xff как фильтрует?
И еще, если это не слишком большая наглость. Можно привести примеры безопасных insert, select и upload, потому что вариантов предлагают много и в каждом кто-то находит недостатки, а хотелось бы все-таки понять, как именно фильтровать данные, чтобы спать спокойно | |
| |
|
|
| |
|
|
| |
для: zeta777
(29.11.2007 в 18:24)
| | | upload? update! | |
| |
|
|
| |
|
|
| |
для: bronenos
(29.11.2007 в 18:36)
| | | ну да, очепятка, update, конечно... | |
| |
|
|
| |
|
|
| |
для: zeta777
(29.11.2007 в 20:32)
| | | Вот, стала делать сама. Вроде регистрацию, поиск, просморт анкеты и другие сделала, а вот файл авторизации никак не получается. Уже практически методом тыка начинаю все пробовать, но безрезультатно.
<?
require "../../settings.php";
$sval = "";
if($action == "submit")
{
$db = c();
$r = q("select id,status from members where login='$login' and pswd='$pswd'");
if(e($r)) $es = "Нет такого пользователя";
else
{
$ff = f($r);
switch($ff[status])
{
case 0:
$sval = "confirm";
break;
case 1:
setcookie("auth",$ff[id]);
setcookie("pass",$pswd);
q("update profiles set ldate='".strtotime(date("d M Y H:i:s"))."' where id='$ff[id]'");
d($db);
header("Location: center.php");
break;
case 2:
$sval = "contact";
break;
}
}
d($db);
}
include "../../_header.php";
include("menu.php");
if($sval == "")
{
?>
<form action="login.php?action=submit" method=post>
<? if($es!=""&&$action=="submit")echo "$es";?>
Логин <input type="text" name="login" value="<?php echo $username; ?>">
ПАРОЛЬ <input type="password" name="pswd" value="<?php echo $password; ?>">
<input type="submit" value="ВХОД"></form>
<?}
if($sval == "confirm"){echo "Вы не подтвердили регистрацию";}
if($sval == "contact"){echo "Ваш профайл дезактивирован";}
?>
Делаю:
$login=$_POST['login'];
$pswd=$_POST['pswd'];
$action=$_GET['action'];
if($_GET['action'] == "submit")
{
$db = c();
$r = q("select `id`, `status`, `login` from `members` where `login`='".view_format($_POST['login'])."' and `pswd`='".view_format($_POST['pswd'])."'");
if(e($r)) $es = "$l_login_wrong!";
else
и вот после else, где switch начинается - ничего не получается. Не могу передать значения.
Очень прошу помощи. | |
| |
|
|
| |
|
|
| |
для: zeta777
(01.12.2007 в 18:15)
| | | <
<?
header("Location: center.php");
break;
|
перенаправление на center.php при корректных вводимых данных происходит ?
в файле center.php принимаются переменные $_COOKIE['auth'], $_COOKIE['pass'] ?
и наверное как-раз тот случай когда select id,status from members where login='$login' and pswd='$pswd'" надо % и _ экранировать | |
| |
|
|
| |
|
|
| |
для: exp
(01.12.2007 в 19:38)
| | | Я экранирую. Там есть функции, которые мне здесь же подсказали, просто я их не включила в код, так как мне главное выяснить как передать данные. В том-то и дело, что перенаправление на center.php никак не происходит :( и to что должно в update произойти тоже не происходит. Я вообще убирала перенаправление на center.php оставляла только update, но не работает. И делала вместо update и header просто echo "$ff[status]";- но данные не передаются. По-моему не определяется $sval. Может $sval нужно как-то с помощью глобльных переменных передавать? Хотя я и это пыталась делать. В общем застряла намертво на авторизации. на switch вообще никак не реагирует. Пыталась убрать switch и делать
if($ff[status]==0) header("Location: login.php?s=confirm");
elseif($ff[status]==2) header("Location: login.php?s=contact");
elseif($ff[status]==1)
а дальше
if ($_GET[s]=="confirm"){echo "регистрация не подтверждена";}
if ($_GET[s]=="contact"){echo "пользователь ".$_POST['login']." , ваша анкета дезактивирована";}
тогда на confirm и contact реагирует , правда в фразе пользователь ".$_POST['login']." логин не передается, но там, где должно быть update и перенаправление на center.php - все равно не работает.
Не знаю, я наверно вообще что-то не то делаю, но что нужно делать - не знаю. Очень прошу помощи | |
| |
|
|
| |
|
|
| |
для: zeta777
(01.12.2007 в 22:23)
| | | перед строкой switch($ff[status])
выведите print_r($ff);
переходы, конечно, отрубятся.
Но Вы хотя бы узнаете, что за пользователя Вам выдал сервер БД по логину и паролю.
Какой у него номер, статус, логин.
Между прочим, писать $ff[id], $ff[status] и т.п. - некорректно. Нужно писать $ff['id'], $ff['status'] и т.д. | |
| |
|
|
| |
|
|
| |
для: Trianon
(01.12.2007 в 23:27)
| | | Спасибо, конечно, но мне не надо просто узнать данные пользователя. мне нужно провести update и чтобы пользователь перешел на страницу center.php - это ж скрипт авторизации. . А он на нее не переходит. Просто ничего не происходит, остаешься на странице login.php, как будто никаких данных не вводил, вот и все.
Я не могу понять почему и что делать.
При register_globals on авторизация прекрасно работает. При register_globals off - ни в какую.
Если бы был переход на center.php, но значения переменных не передавались бы - я бы знала что делать. А так - не знаю. Остаешься на login.php и все и никуда не переходишь.
PS: я пишу в скрипте именно $ff['id']. И вообще я внимательно прочитала вашу задачу 21 и изучила все способы ее решения, разбор их недостатков и ваш в том числе способ решения и мне реально это помогло - я поняла то, чего никак не могла уяснить из статей, которые читала по этому поводу. Просто сейчас мне не это важно. Меня эти register_globals off замучили :(. Вернее передача переменных при register_globals off. Потому что, как я понимаю, авторизация не работает потому, что какие-то переменные не передаются. Или могут быть какие-то другие причины? Еще раз повторю, что при register_globals on скрипт работает без проблем. | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 11:09)
| | | Trianon имел ввиду что не происходит update и перенаправления потому-что
в $ff['status'] (по которому и работает switch) может не оказаться "1"
update и перенаправление включается только если в полученном (из таблицы members) ряду данных о пользователе с введёнными логином и паролем в поле status будет "1"
если не обновляется ldate в таблице profiles (не включается update) и не показывается "Нет такого пользователя" вверху формы значит $ff['status'] не "1"
или "1" ? | |
| |
|
|
| |
|
|
| |
для: exp
(02.12.2007 в 13:57)
| | | Я поняла это :) - в смысле, поняла, что он предлагает это сделать, чтобы понять передается ли значение статуса.
Если использовать switch - то статус не передается вообще.
Если использовать if, elseif elseif - то скрипт передает значения статуса, но на статус=1 реагирует непонятно, то есть никак не реагирует - должен перенаправлять с апдейтом, а вместо этого просто оcтается на странице login.php. При это, если статус 0 или 2 - он прекра но реагирует и выводит нужные сообщения. То есть значение статуса ему передается. Почему же он тогда не делает то, что нужно? | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 14:31)
| | | А вы проверьте - вместо реалных действий, сделайте вывод на экран, навряд ли 1 присутсвует. | |
| |
|
|
| |
|
|
| |
для: sim5
(02.12.2007 в 14:39)
| | | Я проверяла. Еще раз повторю - при switch - нет, значение статуса не выводится вообще.
При if, elseif - выводится правильно, но все равно не апдейтится и не направляет на center.php | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 14:43)
| | | Вы хотите сказать, что если 1, то switch робатать не будет никак?
<?
$ff['status'] = 1;
switch($ff['status']) {
case 0: echo $ff['status'];
break;
case 1: $q = "update profiles set ldate='".strtotime(date("d M Y H:i:s"))."' where id='".$ff['status']."'";
header("location: test.php");
case 2: echo $ff['status'];
}
?>
|
Я просто заменил строку вашу, и сделал перенаправление. Проверьте, и у вас сработает. Перенаправление не будет, если перед передачей заголовка произойдет ошибка, а у вас вывод ошибок отключен. | |
| |
|
|
| |
|
|
| |
для: sim5
(02.12.2007 в 14:56)
| | | Сделала как вы написали - теперь он меня все время на test.php перебрасывает, независимо от того, является ли статус =1 или 0 или 2 | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 15:30)
| | | Ну надеюсь test.php это временный как и у меня файл. У меня постоянно есть файл main.php, где я проверяю отдельные кусочки кода. Вот то, что я написал выше я прописал в main.php, при $ff['status'] = 0 и 2 я остаюсь в main.php и никак иначе. А вот при 1, есть переход. И у вас так должно быть, ваш РНР от моего ничем не отличается. | |
| |
|
|
| |
|
|
| |
для: sim5
(02.12.2007 в 15:35)
| | | Не сомневаюсь, что PHP не отличается, но меня перебраcывает на test.php при любых значениях $ff['status']. У меня файл, конечно не main.php, а login.php и значения статуса должны выводится именно в нем, если статус=0 или 2, если статус равен 1 - должно перебросить на test.php. Теоретически. Практически меня теперь туда перебрасывает при всех значениях статуса :). Ну, да, ладно, я переделала скрипт авторизации без switch, потому как переделать с использованием switch у меня так и не получилось. | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 16:27)
| | | Вы прямо таки "фантастический коммент" написали. switch тут не причем, я кусочек вашего кода прописал, в отрыве вообще от всего остального. Пропишите отдельно прстую кострукцию switch - думаю вы сами понимаете, что она у вас работать будет отменно. В реальном же коде (вам это еще ранее предлагал Trianon), заремируйте switch, и вместо этого сделайте вывод на экран:
echo $ff['status'];
exit;
Если вы получите статус равный 1 при этом, то проблемы надо искать после case 1:, а не в самом switch. | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 15:30)
| | | там в center.php наверняка стоит переадресация на авторизацию при отсутствии
$_COOKIE['auth'] и $_COOKIE['pass'], или если там не находит в базе такого юзера
сделайте в center.php print_r($_COOKIE);
может-быть всё дело в том что вас оттуда переадресовывает обратно ? | |
| |
|
|
| |
|
|
| |
для: exp
(02.12.2007 в 15:59)
| | | Или после register_globals = off, к кукам обращение не как $_COOKIE, а осталось по старому. | |
| |
|
|
| |
|
|
| |
для: exp
(02.12.2007 в 15:59)
| | | ну, да проверка есть. В файле center.php есть include файла member.php, в котором определяются права пользователя. В этом файле есть строчка:
$r=q("select status, rdate from members where id='$auth' and pswd='$pass'");
if(e($r))
{header("Location: login.php");exit;}
Просто я про это не упоминала, потому, что когда проверяла файл login.php я строчку
if(e($r))
{header("Location: login.php");exit;}
из member.php убирала, чтобы понять, это из center.php меня обратно на login.php перебрасывает или я остаюсь там на login.php, никуда не иду. Получалось, что просто я туда (в center.php) не попадаю, потому что без строчки if(e($r))
{header("Location: login.php");exit;} все равно я на login.php оставалась
Но теперь, когда я убрала switch и сделала if - вроде с файлом login.php разобралась. Теперь без строчки проверки я на center.php попадаю.
Теперь проверку на member.php нужно пройти :)
Значит, было так:
$r=q("select status, rdate from members where id='$auth' and pswd='$pass'");
if(e($r))
{header("Location: login.php");exit;}
Делаю так:
$auth=$_COOKIE['auth'];
$pass=$_COOKIE['pass'];
$r=q("select `status`, `rdate` from `members` where `id`='".intval($_COOKIE['auth'])."' and `pswd`='".$_COOKIE['pass']."'");
if(e($r))
{
setcookie("auth", "", time() - 3600*24*30*12, "/");
setcookie("pass", "", time() - 3600*24*30*12, "/");
header("Location: login.php");exit;
};
В общем окончательно у меня получается так:
login.php
$ff = f($r);
if($ff['status']==0) header("Location: login.php?s=confirm");
elseif($ff['status']==2) {header("Location: login.php?s=contact");}
elseif($ff['status']==1)
{
setcookie("auth",intval($_POST['id'], time()+60*60*24*30));
setcookie("pass",$_POST['pswd'], time()+60*60*24*30);
q("update `profiles` set `ldate`='".strtotime(date("d M Y H:i:s"))."' where `id`='".intval($_POST['id'])."'");
d($db);
header("Location: center.php");}
А дальше в member.php проверка идет так:
$auth=$_COOKIE['auth'];
$pass=$_COOKIE['pass'];
$r=q("select `status`, `rdate` from `members` where `id`='".intval($_COOKIE['auth'])."' and `pswd`='".$_COOKIE['pass']."'");
if(e($r))
{
setcookie("auth", "", time() - 3600*24*30*12, "/");
setcookie("pass", "", time() - 3600*24*30*12, "/");
header("Location: login.php");exit;
};
Только она не работает :(. Я опять в login.php оказываюсь, но теперь уже я туда из center.php попадаю.
Еще раз обращаюсь: может есть кто-нибудь, кто сможет помочь мне за оплату?
В принципе мне осталось-то уже немного (я надеюсь) - вот эту самую авторизацию и проверку пройти, чтобы на пользовательскую территорию корректно попадать. То есть всего три файла - login.php (login.php по сути уже работает), member.php и center.php
Просто мне уже неудобно перед всеми, кто мне помогает, я всем очень благодарна, но уже стыдно надоедать глупыми вопросами :) | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 16:51)
| | | если своими руками хотя-бы переделано , то проще разобраться потом при эксплуатации,
тем-более вам осталось совсем немножко разобраться :)
и уязвимости при разных настройках по разному могут повлиять, можно просто для себя делать скрипт, зная как что у себя настроено. а можно делать ориентируясь на любые возможные включения/выключения
интересный сканер (acunetix vulnerubility scanner) гугл такого не знает , где вы его нашли ? | |
| |
|
|
| |
|
|
| |
для: exp
(02.12.2007 в 17:25)
| | | Сканнер http://www.acunetix.com/ Хороший сканнер. Иногда, как мне кажется излишне строг, найдет уязвимость там, где ее нет (или по крайней мере кажется что нет и xspider ничего не находит), но зато там, где она есть - уж точно не пропустит. Хороший анализ выдает. Даже советы по исправлению. Дорогой ($ 4995), но в инете есть рабочая пиратская версия :), которая нормально обновляет базу данных по уязвимостям.
Я понимаю, что если сама сделаю - то лучше разберусь. Но не могу, ну никак эту авторизацию сделать. Знаете, сколько я с ней мучаюсь уже? Не получается. Проблема в том, что я-то не программист вообще, и никогда им не была, училась по книжкам да по статьям в инете, да вот еще по форумам... И из моих знакомых я единственный, кто вообще слышал слово такое - PHP :). Просто этот скрипт больше разработчиками не поддерживается, они предлагают только на новые их скрипты переходить, но ведь и новые их скрипты тоже с register_globals on работают, а я этим скриптом давно пользуюсь и у меня база пользователей большая (но это не проблема, я бы ее как-нибудь переконвертировала), что самое главное - я к нему кучу нужных мне функций приделала, в других скриптах знакомств их вообще нет, обидно терять, оптимизировала нагрузку на базу данных, насколько возможно (тоже, между прочим для меня непосильный труд был :), плюс я его все-таки знаю, как свои пять пальцев, получается все зря.... А времени мало - у меня неожиданно сайт раскрутился :), посещаемость резко выросла, соотв-но опасность того, то кто-то хакнет не сегодня-завтра - реально увеличилась. В общем, поверите - день и ночь сижу, переделываю скрипт, даже по ночам мне уже этот PHP снится (серьезно). | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 16:51)
| | | 1. Я бы помог, если б мог глянуть на исходники полностью.
Где можно откопать весь пакет, без необходимости его купить, я не нашел.
2. Собственно мы здесь все (ну почти все) собрались именно затем, чтобы друг у друга просить совета или помощи, и соответственно, друг другу помогать. Так что чему тут можно стыдиться, я не вижу совершенно. Наоборот, то что Вы не пасуете перед нетривиальной задачей, а упорно пытаетесь выяснить, как её забороть (пусть при помощи зала), лишь делает Вам честь. Как минимум в моих глазах - совершенно точно. Неудобно ....... в лыжах и на гамаке. А спрашивать совета, там где этого ждут, вполне удобно.
3. моя аська шесть восемь семь пять восемь девять пять. И если Вы где-нибудь поместите архив с исходниками, я попытаюсь поспособствовать более детально. | |
| |
|
|
| |
|
|
| |
для: Trianon
(02.12.2007 в 19:26)
| | | Спасибо большое. Вам прям весь скрипт или только эти файлы? sql файл нужен? | |
| |
|
|
| |
|
|
| |
для: zeta777
(02.12.2007 в 19:32)
| | | Нужны все файлы, которые так или иначе втянуты в процесс. В идеале - вообще весь исходный архив + архив файлов с Вашими исправлениями. Больше не меньше.
SQL-дамп тоже будет полезен, можно будет сразу проверить что в базе не так. | |
| |
|
|
| |
|
|
| |
для: Trianon
(02.12.2007 в 19:39)
| | | Отослала вам письмо | |
| |
|
|
| |
|
|
| |
для: Trianon
(02.12.2007 в 19:39)
| | | Большое спасибо. Все работает. | |
| |
|
|
|