Проблема с UPDATE данных в БД

dmitry1984

Новичок
Проблема с UPDATE данных в БД

PHP:
<?php 
session_start(); 
class Stat 
{ 
   function Show() 
   { 
    mysql_query("delete from loto_people where time<".(time()-1*60)); 
    $q=mysql_query("select * from loto_people where ip='".$_SERVER['REMOTE_ADDR']."'"); 
    if(mysql_num_rows($q)==0) 
    { 
mysql_query("insert into loto_people values('".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."','".$_SERVER['HTTP_ACCEPT_LANGUAGE']."','".$_SERVER['HTTP_HOST']."',".time().",'".$_SESSION['gamer']."','".$_COOKIE['wmid']."', '".mysql_escape_string($_SERVER['REQUEST_URI'])."', '".mysql_escape_string($_SERVER['HTTP_REFERER'])."')"); 
} 
else 
{ 
    mysql_query("update loto_people set time='".time()."',gamer='".$_SESSION['gamer']."',par_prog='".$_COOKIE['wmid']."',request='".mysql_escape_string($_SERVER['REQUEST_URI'])."',referer='".mysql_escape_string($_SERVER['HTTP_REFERER'])."' where ip='".$_SERVER['REMOTE_ADDR']."'"); 
    } 
   } 
     

}; 
?>
Вот код. Проблема в следующем, при обновлении ячеек request и referer в базу записывается в request - "/0", в referer - полный адрес страницы, например "http://www.site.ru/?page=text". При INSERT данные записываются как положено, да и если в этой же функции вывести переменные $_SERVER['HTTP_REFERER'] и $_SERVER['REQUEST_URI'] просто через echo, то они отображаются нормально, непосредственно в той части которая идет после else, но в базу пишется какая-то ерунда.


Дамп базы

CREATE TABLE `loto_people` (
`ip` varchar(15) NOT NULL default '',
`UserAgent` varchar(250) NOT NULL default '',
`Language` varchar(15) NOT NULL default '',
`Host` varchar(15) NOT NULL default '',
`Time` int(16) NOT NULL default '0',
`gamer` varchar(13) NOT NULL default '',
`par_prog` varchar(13) NOT NULL default '',
`request` varchar(30) NOT NULL default '',
`referer` varchar(250) NOT NULL default '',
KEY `ip` (`ip`)
) TYPE=MyISAM;


INSERT INTO `loto_people` VALUES ('200.100.90.100', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 5.2 (build 02349); .NET Client 3.5.30729.01)', 'ru', 'www.site.ru', 1222255549, 'gamers', '123456789012', '/0', 'http://www.site.ru/?page=account');


Что не так?
 

dmitry1984

Новичок
Автор оригинала: Bitterman
а если вывести получившийся запрос?
Если вывести, то все нормально. Я же написал, что через echo все нормально показывает, все переменные в запрос ставятся
 

Фанат

oncle terrible
Команда форума
пацаны, кто хочет на халяву в лотерею выиграть?
дырявые запросы и адрес сайта - все есть. налетай!
 

Gas

может по одной?
Проблема в следующем, при обновлении ячеек request и referer в базу записывается в request - "/0"
данные перезаписываются вызовами, которые идут после твоего первого правильного. Открой для себя firebug и запусти свой сайт, видно что дёргается url /0

Что касается безопасности, Фaнат всё сказал.
 

dmitry1984

Новичок
Автор оригинала: *****
пацаны, кто хочет на халяву в лотерею выиграть?
дырявые запросы и адрес сайта - все есть. налетай!
Мы ж уже с тобой проходили тему дырявых запросов год-два назад на форуме :)
А эти запросы просто смотрят кто онлайн, доступа в аккаунт все равно нет ;)

-~{}~ 24.09.08 18:10:

Автор оригинала: Gas
данные перезаписываются вызовами, которые идут после твоего первого правильного. Открой для себя firebug и запусти свой сайт, видно что дёргается url /0

Что касается безопасности, Фaнат всё сказал.
Host: www.ultrex.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.ultrex.ru/?page=lt_gt
Cookie: __utma=251820109.1935741160.1217692132.1222262454.1222265143.99; __utmz=251820109.1220226897.77.3.utmccn=(referral)|utmcsr=sms.ultrex.ru|utmcct=/|utmcmd=referral; userid=gamers; wmid=377620902568; visit=1; PHPSESSID=6ec63a09c5879782f35311aa7a377e09; __utmb=251820109; __utmc=251820109
Cache-Control: max-age=0

Реферер в firebug правильно определяется, а в базу записывается текущий адрес страницы :(
 

kruglov

Новичок
Мы ж уже с тобой проходили тему дырявых запросов год-два назад на форуме
Хм, некоторые "проходят", а некоторые изучают.

Вот такие программисты пройдут, а потом форумы дырявые, на mail.ru почтовые ящики хакают (прям эпидемия в последнее время) и т.д.
 

Gas

может по одной?
Реферер в firebug правильно определяется, а в базу записывается текущий адрес страницы
ты привёл хедеры загрузки главной страницы сайта, но она тянет за собой загрузку внешних резурсов, в том числе грузится урл http://www.ultrex.ru/0, он показывает страницу 404, но в базе нужную запись уже херит.
 

dmitry1984

Новичок
Гружу страницу: http://www.ultrex.ru/?page=dama
Реферер: http://www.ultrex.ru/?page=lt_gt
REQUEST: /?page=dama

А в базе оказывается реферер http://www.ultrex.ru/?page=dama, рекуест /0

Если записи нет, то при INSERT все нормально
 

Gas

может по одной?
Если записи нет, то при INSERT все нормально
вот то что нормально - это действительно странно.

Ещё раз (последний), ты понимаешь, что когда броузер получает html запрошенной страницы, он делает новые http запросы к твоему сайту ? Это понятно? Одним из этих запросов является http://www.ultrex.ru/0 - откуда он берётся, я понятия не имею, может у тебя где-то баг в js-е, или есть стиль вида background="0" (догадайся что сделает). В итоге страница с твоим кодом загружается не 1 раз, а 2 или больше.
 

dmitry1984

Новичок
Автор оригинала: kruglov
А это не дырка? Именно такую дырку я как-то патчил в похаканном форуме IPB как-то года 3 назад.
Там в оригинале стоит mysql_escape_string($_GET['p']), а сюда я код скинул с тестовой записью из куки. Я просто уже все перепробывал, не хотят переменные нормально записываться....

А /0 реально хз откуда берется.... Но самое главное, что реферер то тоже какой-то левый :(
 

kruglov

Новичок
На реферере вообще что-то кроме статистики строить нельзя.
 

dmitry1984

Новичок
Разобрался. Действительно JS'овое меню обращалось к /0 ... убрал, все заработало :)
 
Сверху