Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Друзья, вопрос по безопасности данного скрипта / 16 сообщений из 16, страница 1 из 1
07.05.2013, 14:18
    #38250321
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
Добрый день.
Очень надеюсь на Вашу помощь.
Пхп только начал изучать, поэтому прошу сильно не пинать.
Ниже представлен тестовый php скрипт и javascript
Суть задачи в том чтобы аяксом передавалось в браузер некая «сумма за все время» и «сумма за СЕГОДНЯ» и изменялась она в зависимости от текущего времени
Посмотрите пож.
1)Не будет ли создаваться большой нагрузки на сервер (посещаемость ~1500 чел в день)
2)И главный вопрос это безопасность: возможно что либо сделать злоумышленнику через данный код аякса и данный php скрипт. Вроде php скрипт ни как не использует отправленные данные пользователем, но все же я только учусь и скорее всего чего-то не знаю, поэтому прошу Вас посмотреть.
Огромное спасибо за внимание.

JAVAscript

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<script>
$(document).ready(function () {
    $.ajax ({
            url:'2.php',
            type: "POST",
            success: function (data) {
                            
               $('div.total_alltime').html("За ВСЕ время "+data.total_alltime)
               $('div.total_today').html("За СЕГОДНЯ "+data.total_today);
                      
                
                }
            
        });
});
</script>



HTML
Код: html
1.
2.
3.
<div class="total_alltime"></div>

<div class="total_today"></div>



PHP
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    
    $mysql = mysql_connect("localhost","root","");
	mysql_select_db ("testsite", $mysql);
    
    $now = (int)date("His");
    
    
    
    
    
    function proverka_zapisi ($param, $chislo,$random_chislo) {     
        $proverka = mysql_query("SELECT bd_time FROM count WHERE id=1");//получаем что у нас имееться
        $proverka = mysql_fetch_array($proverka);
        if ((int)$proverka['bd_time'] == $param) {//т.е была запись но она старая
            mysql_query("UPDATE count SET total_today=(total_today+$random_chislo),total_alltime=(total_alltime+$random_chislo),bd_time=$chislo WHERE id=1");//добавляем к тому что сегодня и к тому что за все время
        }      
    }
    
    
    
    
    
    
    if ($now > 100000 && $now < 101500) {//с 10 часов до 10:15
        $random_chislo = rand(0,2);
        
        $proverka = mysql_query("SELECT bd_time FROM count WHERE id=1");//получаем что у нас имееться
        $proverka = mysql_fetch_array($proverka);
            if ((int)$proverka['bd_time'] == 0) {//т.е ещё небыло записей
                mysql_query("UPDATE count SET total_today=(total_today+$random_chislo),total_alltime=(total_alltime+$random_chislo),bd_time=10 WHERE id=1");//добавляем к тому что сегодня и к тому что за все время
            }
        
    }
    if ($now > 120000 && $now < 121500) {//с 12 часов до 12:15
        $random_chislo = rand(2,5);
        
        proverka_zapisi (10,12, $random_chislo);//
        
    }
    if ($now > 150000 && $now < 151500) {//с 15 часов до 15:15
        $random_chislo = rand(2,6);
        proverka_zapisi (12,15, $random_chislo);
        
    }
    if ($now > 180000 && $now < 181500) {//с 18 часов до 18:15
        $random_chislo = rand(1,5);
         proverka_zapisi (15,18, $random_chislo);
        
    }
    if ($now > 210000 && $now < 211500) {//с 21 часов до 21:15
        $random_chislo = rand(1,5);
         proverka_zapisi (18,21, $random_chislo);
        
    }
    if ($now > 235900 && $now < 000500) {//с 23^59 часов до 00:05 обнуление
        mysql_query("UPDATE count SET total_today=0,bd_time=0 WHERE id=1");//обнуляем
        
    }
    
    
    $res = mysql_query("SELECT total_today,total_alltime FROM count WHERE id=1");//получаем что у нас имееться
    $res = mysql_fetch_array($res);
    
    $total_today = $res['total_today'];
    $total_alltime = $res['total_alltime'];
       
    header('Content-type: application/json');
    die (json_encode(
        array (
           
            'total_today' => $total_today,
            'total_alltime' => $total_alltime,
        )
    
    ));
    
    exit();
}
//Если это не ajax запрос
exit();
...
Рейтинг: 0 / 0
07.05.2013, 16:16
    #38250557
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitmeВроде php скрипт ни как не использует отправленные данные пользователемВроде не использует. Тогда и волноваться не о чем.

Цепочку проверок попадания в пятнадцатиминутные интервалы (как они есть сейчас) вместе с вызовом proverka_zapisi можно в принципе оформить как функцию от времени (часов).
...
Рейтинг: 0 / 0
07.05.2013, 16:41
    #38250618
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitme,

Можно узнать суть скрипта?

Не понял изречение vkle. Видимо есть какая-то закономерность во времени и параметрах функции, но я её не понял. По-этому, предложу свой вариант облагораживания кода.
Итак, весь массив значений часов и параметров можно внести в один массив:
Код: php
1.
2.
3.
4.
5.
array(
  array('min'=>120000, 'max'=>121500, 'param'=>10, 'chislo'=>12, 'rmin'=>2, 'rmax'=>5),
  array('min'=>150000, 'max'=>151500, 'param'=>12, 'chislo'=>15, 'rmin'=>2, 'rmax'=>6),
  ...
)


тогда все условия сведутся к коду:
Код: php
1.
2.
3.
4.
5.
foreach($data as $case){ //$data - созданный нами массив. Берём каждое значение для сравнения
  if($now>$case['min'] && $now<$case['max']){
    proverka_zapisi($case['param'], $case['chislo'], rand($case['rmin'], $case['rmax']))
  }
}



Начать можно с этого, когда код будет в раз 5-7 меньше оптимизировать будет легче, так как всё будет перед глазами
...
Рейтинг: 0 / 0
07.05.2013, 17:01
    #38250659
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
Спасибо Вам большое, за ответы. Вы в меня вселили увереность во всем этом деле.

Правда, огромное спасибо. Я очень раз что данного вида код полностью безопасен=))
Еще раз спасибо *убежал подпрыгивая*
...
Рейтинг: 0 / 0
07.05.2013, 17:09
    #38250672
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
Програмёр,

Смысла пока нет есть тока задумки. Нужно чтобы в зависимости от времени будут картиноски кое какие добавляться, а из количество будет браться из бд.

а вто это


Код: php
1.
2.
3.
4.
5.
foreach($data as $case){ //$data - созданный нами массив. Берём каждое значение для сравнения
  if($now>$case['min'] && $now<$case['max']){
    proverka_zapisi($case['param'], $case['chislo'], rand($case['rmin'], $case['rmax']))
  }
}



для меня что то страшно пока что выглядит

не пойму что за "$data - созданный нами массив. Берём каждое значение для сравнения"
...
Рейтинг: 0 / 0
07.05.2013, 17:14
    #38250683
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$data = array(
  array('min'=>120000, 'max'=>121500, 'param'=>10, 'chislo'=>12, 'rmin'=>2, 'rmax'=>5),
  array('min'=>150000, 'max'=>151500, 'param'=>12, 'chislo'=>15, 'rmin'=>2, 'rmax'=>6),
  ...
)

foreach($data as $one_case){ //$data - созданный нами массив. Берём каждое значение для сравнения
  if($now>$one_case['min'] && $now<$one_case['max']){
    $random_chislo = rand($one_case['rmin'], $one_case['rmax']);
    proverka_zapisi($one_case['param'], $one_case['chislo'], $random_chislo)
  }
}


Хм... Новичёк? :)
Так нагляднее?
...
Рейтинг: 0 / 0
07.05.2013, 17:20
    #38250696
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
Програмёр,

Благодарю Вас сэррр.

Вы правы я новичек, и спасибо за подсказку теперь все понятно. Ну а вообще Ваша запись реально сильно уменьшает нагрузку на сервер?

Ещё раз пасибо+))))
...
Рейтинг: 0 / 0
07.05.2013, 17:33
    #38250720
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitmeПрограмёр,

Благодарю Вас сэррр.

Вы правы я новичек, и спасибо за подсказку теперь все понятно. Ну а вообще Ваша запись реально сильно уменьшает нагрузку на сервер?

Ещё раз пасибо+))))
Моя запись уменьшает нагрузку не на сервер, а на глаза. Нагрузка на сервер при моём варианте вырастит несущественно (незаметно при посещаемости 1500 чел/день)
...
Рейтинг: 0 / 0
07.05.2013, 17:47
    #38250740
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
ммм...ээээ...ыыыы...

авторНагрузка на сервер при моём варианте вырастит несущественно (незаметно при посещаемости 1500 чел/день)


Т.е при 100тыс чел она ВЫРАСТЕТ при вашей записи?

Просто мне интересно что же больше грузит так как у меня или как у Вас.
...
Рейтинг: 0 / 0
07.05.2013, 17:49
    #38250747
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitme,

кстати, что бы поставить точку над "и". :) Дело в том, что нагрузка от написанного кода будет мизерная, а по-этому никаких проблем не будет при указанной посещаемости. Можете затолкать свой код в цикл:
Код: php
1.
2.
3.
for($i=0; $i<1500; $i++){
  ... Ваш код ...
}


и посмотреть как быстро он выполнится. Думаю это будут секунды (хотя возможно и меньше). То есть даже при одновременном заходе 1500 юзеров (при условии что сервер не ограничит количество соединений) - зашедший последним будет ждать не дольше (скорее даже меньше), чем ждёте Вы при выполнении вышеуказанного цикла.
...
Рейтинг: 0 / 0
07.05.2013, 17:53
    #38250752
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitmeммм...ээээ...ыыыы...

авторНагрузка на сервер при моём варианте вырастит несущественно (незаметно при посещаемости 1500 чел/день)


Т.е при 100тыс чел она ВЫРАСТЕТ при вашей записи?

Просто мне интересно что же больше грузит так как у меня или как у Вас.

Можете попробовать указанным выше способом проверить :). Просто все операции настолько лёгкие (в плане ресурсов), что разницы не будет. Хотя точнее сказать она будет, но измеряться думаю будет в микросекундах на 100 000 чел.
...
Рейтинг: 0 / 0
07.05.2013, 17:55
    #38250755
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
ПрограмёрНе понял изречение vkle. Видимо есть какая-то закономерность во времени и параметрах функции, но я её не понял.

Почти поняли :-)
Перебор тут нафиг не нужен. Можно проверять час непосредственно по ключу. Минуты тоже привязаны к началу часа. Немного позаимствовал Ваш массив. Получается приблизительно так (код не проверял):

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$data = array(
	12 => array('param' => 10, 'rmin' => 2, 'rmax' => 5),
	15 => array('param' => 12, 'rmin' => 2, 'rmax' => 6),
	// и так далее
)

$h = (int)date("H"); // текущий час, он же ключ массива
$ms = (int)date('is'); // минута/секунда
if(array_key_exists($h, $data) && $ms > 0 && $ms < 1500)
	proverka_zapisi(
		$data[$h]['param'],
		$h,
		rand($data[$h]['rmin'], $data[$h]['rmax'])
	)
...
Рейтинг: 0 / 0
07.05.2013, 17:59
    #38250762
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
Програмёр,

Ничего себе=))

Спасибо Вам огромное. Очень приятно побеседовать с профи в данном деле.

А можно вопросик не совсем по теме. А то начитался про всякие уязвимости сайтов, мало чего понял.

Вот допустим

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 $.ajax ({
            url:'2.php',
            type: "POST",
data:'perem=1',
            success: function (data) {
                            
               $('div.total_alltime').html("За ВСЕ время "+data.total_alltime)
               $('div.total_today').html("За СЕГОДНЯ "+data.total_today);
                      
                
                }
            
        });



и пхп

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

if ($_POST['perem'] == 1) {


$mysql = mysql_connect("localhost","root","");
mysql_select_db ("testsite", $mysql);
mysql_query("UPDATE count SET.....//и пошел какойто код с использованием переменной $_POST['perem']
}

}


Такая конструкция php скрипта являеться безопасной? Ведь пользователь даже если чтото попытаеться предпринять, то код ведь работает при условии что $_POST['perem'] равно 1

Или это не так?

Спасибо.
...
Рейтинг: 0 / 0
07.05.2013, 18:01
    #38250765
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitme,

Не скажу насчет веб-безопасности, но с базой делается черти-что.

0) Нет слова "имееться", есть слово "имеется".

1)
Код: php
1.
if ((int)$proverka['bd_time'] == $param) {//т.е была запись но она старая

Это почему же старая запись будет иметь bd_time сторого равную $param? А не, например, меньше?

2) WHERE id=1 - это какой-то магический id ?

3) Вы проверяете что-то в таблице селектом, а потом апдейтите эту таблицу. А если параллельно будет работать две копии скрипта, они обе сначала проверят, а потом обе проапдейтят, то что будет в таблице?

Я бы большую часть скрипта, наверное, свел бы к одному SQL-запросу вида INSERT ... ON DUPLICATE KEY UPDATE. Но это уже зависит от задачи, которую решает этот скрипт.
...
Рейтинг: 0 / 0
07.05.2013, 18:13
    #38250784
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
delitme,

Уязвимости не будет. SQL-инъекция возможна например тогда, когда без предварительной проверки/обработки написать запрос типа
Код: php
1.
mysql_query("SELECT * FROM table WHERE id={$_POST['param']}")

. тогда можно в запрос вставить всё что угодно... иначе - вероятность пропустить инъекцию невысока

P.S. Не надо меня в краску вгонять :) . Как видите, тут присутствуют люди намного более опытные, чем я.
...
Рейтинг: 0 / 0
08.05.2013, 12:36
    #38251600
delitme
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Друзья, вопрос по безопасности данного скрипта
miksoft,

Простите а что будет в таблице? Разве не нужное нам число? Или я не прав? Если не прав то подскажите пожалуйста как это пресечь?
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Друзья, вопрос по безопасности данного скрипта / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]