powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Друзья, вопрос по безопасности данного скрипта
16 сообщений из 16, страница 1 из 1
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #38250557
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delitmeВроде php скрипт ни как не использует отправленные данные пользователемВроде не использует. Тогда и волноваться не о чем.

Цепочку проверок попадания в пятнадцатиминутные интервалы (как они есть сейчас) вместе с вызовом proverka_zapisi можно в принципе оформить как функцию от времени (часов).
...
Рейтинг: 0 / 0
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #38250659
delitme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Вам большое, за ответы. Вы в меня вселили увереность во всем этом деле.

Правда, огромное спасибо. Я очень раз что данного вида код полностью безопасен=))
Еще раз спасибо *убежал подпрыгивая*
...
Рейтинг: 0 / 0
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #38250696
delitme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Програмёр,

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

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

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

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

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

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

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


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

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

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


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

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


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

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

Можете попробовать указанным выше способом проверить :). Просто все операции настолько лёгкие (в плане ресурсов), что разницы не будет. Хотя точнее сказать она будет, но измеряться думаю будет в микросекундах на 100 000 чел.
...
Рейтинг: 0 / 0
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #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
Друзья, вопрос по безопасности данного скрипта
    #38250784
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
delitme,

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

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

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

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


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