Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP7 - пара вопросов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Lolya
Отправлено: 08 Ноября, 2020 - 12:10:05
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




в свете переписания скрипта под PHP7, вылезла проблемка. Это было в старом скрипте, как его поменять на новый вариант?
PHP:
скопировать код в буфер обмена
  1. if(!isset($HTTP_POST_VARS) && isset($_POST)){$HTTP_POST_VARS = $_POST;$HTTP_GET_VARS = $_GET;
  2. $HTTP_SERVER_VARS = $_SERVER;$HTTP_COOKIE_VARS = $_COOKIE;$HTTP_ENV_VARS = $_ENV;$HTTP_POST_FILES = $_FILES;}
  3. // STRIP MAGIC QUOTES FROM REQUEST
  4. if(get_magic_quotes_gpc()){if(!empty($_GET)){$_GET = strip_magic_quotes($_GET);}
  5. if(!empty($_POST)){$_POST = strip_magic_quotes($_POST);}if(!empty($_COOKIE)){$_COOKIE = strip_magic_quotes($_COOKIE);}}
  6. // DO SOME EXTRA STUFF
  7. if(!get_magic_quotes_gpc()){if(is_array($HTTP_GET_VARS)){while (list($k, $v) = each($HTTP_GET_VARS)){
  8. if(is_array($HTTP_GET_VARS[$k])){while (list($k2, $v2) = each($HTTP_GET_VARS[$k])){$HTTP_GET_VARS[$k][$k2] = addslashes($v2);}
  9. @reset($HTTP_GET_VARS[$k]);}else{$HTTP_GET_VARS[$k] = addslashes($v);}}@reset($HTTP_GET_VARS);}
  10. ///////////////////
  11. if(is_array($HTTP_POST_VARS)){while (list($k, $v) = each($HTTP_POST_VARS)){
  12. if(is_array($HTTP_POST_VARS[$k])){while (list($k2, $v2) = each($HTTP_POST_VARS[$k])){$HTTP_POST_VARS[$k][$k2] = addslashes($v2);}
  13. @reset($HTTP_POST_VARS[$k]);}else{$HTTP_POST_VARS[$k] = addslashes($v);}}@reset($HTTP_POST_VARS);}
  14. ////////////////////
  15. if(is_array($HTTP_COOKIE_VARS)){while (list($k, $v) = each($HTTP_COOKIE_VARS)){
  16. if(is_array($HTTP_COOKIE_VARS[$k])){while (list($k2, $v2) = each($HTTP_COOKIE_VARS[$k])){$HTTP_COOKIE_VARS[$k][$k2] = addslashes($v2);}
  17. @reset($HTTP_COOKIE_VARS[$k]);}else{$HTTP_COOKIE_VARS[$k] = addslashes($v);}}@reset($HTTP_COOKIE_VARS);}}


я так думаю что сменив все переменные, или не права? Вот так примерно оставить:

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){$_POST = htmlspecialchars_uni($_POST);$_GET = isset($_GET);
  2. $_SERVER = isset($_SERVER);$_COOKIE = isset($_COOKIE);$_ENV = isset($_ENV);$_FILES = isset($_FILES);}
 
 Top
Vladimir Kheifets
Отправлено: 10 Ноября, 2020 - 20:27:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Lolya пишет:
в свете переписания скрипта под PHP7, вылезла проблемка. Это было в старом скрипте, как его поменять на новый вариант?
Спойлер (Отобразить)
я так думаю что сменив все переменные, или не права? Вот так примерно оставить:

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){$_POST = htmlspecialchars_uni($_POST);$_GET = isset($_GET);
  2. $_SERVER = isset($_SERVER);$_COOKIE = isset($_COOKIE);$_ENV = isset($_ENV);$_FILES = isset($_FILES);}

Добрый день!
Вот так примерно оставлять не желательно.
1. Во всех случаях результат !isset($_POST) && isset($_POST) = true.
2. Не существует функции htmlspecialchars_uni, а есть htmlspecialchars и она работaет с переменными типа string, а не с массивами, как у Вас $_POST.
3. Функции isset возвращает bool (true/false).
В результате выполнения команды $_SERVER = isset($_SERVER), содержимоемое массива будет потеряно, a eсли затем посмотрите var_dump($_SERVER),
то увидете bool (true). Итак сотрёте всё - $_GET, $_POST, и.т.п.

(Отредактировано автором: 10 Ноября, 2020 - 20:28:39)

 
 Top
Lolya
Отправлено: 11 Ноября, 2020 - 18:59:30
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Vladimir Kheifets
А как верно исправить? Закатив глазки

Vladimir Kheifets пишет:
Не существует функции htmlspecialchars_uni, а есть htmlspecialchars

PHP:
скопировать код в буфер обмена
  1. if(!function_exists("htmlspecialchars_uni")){function htmlspecialchars_uni($message){
  2. $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
  3. $message = str_replace("<","<",$message);$message = str_replace(">",">",$message);
  4. $message = str_replace("\"",""",$message);$message = str_replace("  ", "&nbsp;&nbsp;", $message);return $message;}
  5. ////////////////////////////////
  6. function html_uni($str){return htmlspecialchars_uni($str);}}

(Отредактировано автором: 11 Ноября, 2020 - 19:09:40)

 
 Top
Vladimir Kheifets
Отправлено: 12 Ноября, 2020 - 08:50:03
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Lolya пишет:
Vladimir Kheifets
А как верно исправить? Закатив глазки

Vladimir Kheifets пишет:
Не существует функции htmlspecialchars_uni, а есть htmlspecialchars

PHP:
скопировать код в буфер обмена
  1. if(!function_exists("htmlspecialchars_uni")){function htmlspecialchars_uni($message){
  2. $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
  3. $message = str_replace("<","<",$message);$message = str_replace(">",">",$message);
  4. $message = str_replace("\"",""",$message);$message = str_replace("  ", "&nbsp;&nbsp;", $message);return $message;}
  5. ////////////////////////////////
  6. function html_uni($str){return htmlspecialchars_uni($str);}}

Добрый день!
Лучше заменять в коде всё, что не актуально в PHP7, например, $HTTP_GET_VARS, $HTTP_POST_VARS,... на $_GET, $_POST,...
Если Вы хотите применить Вашу функцию htmlspecialchars_uni или другую ко всем элементам массива $_POST,
то вместо $_POST = htmlspecialchars_uni($_POST)
Можно написать
PHP:
скопировать код в буфер обмена
  1. foreach($_POST as $name=>$value) $_POST[$name]=htmlspecialchars_uni($value);

или только к некоторым элементам
PHP:
скопировать код в буфер обмена
  1. foreach(["text1","text2","text3"] as $name) $_POST[$name]=htmlspecialchars_uni($_POST[$name]);

Удачи!

(Отредактировано автором: 12 Ноября, 2020 - 08:51:13)

 
 Top
Lolya
Отправлено: 12 Ноября, 2020 - 09:29:03
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




Vladimir Kheifets пишет:
Добрый день!
Лучше заменять в коде всё, что не актуально в PHP7, например, $HTTP_GET_VARS, $HTTP_POST_VARS,... на $_GET, $_POST,

если брать изначальный код, то get_magic_quotes_gpc более не существует и надо все упоминания о нем удалить, это я прочла на форумах программирования. То-есть, от кода останется только:

PHP:
скопировать код в буфер обмена
  1. if(!isset($HTTP_POST_VARS) && isset($_POST)){$HTTP_POST_VARS = $_POST;$HTTP_GET_VARS = $_GET;
  2. $HTTP_SERVER_VARS = $_SERVER;$HTTP_COOKIE_VARS = $_COOKIE;$HTTP_ENV_VARS = $_ENV;$HTTP_POST_FILES = $_FILES;}


вы предлагаете сделать так ? :

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){
  2. $_POST= $_POST;
  3. $_GET= $_GET;
  4. $_SERVER= $_SERVER;
  5. $_COOKIE= $_COOKIE;
  6. $_ENV= $_ENV;
  7. $_FILES= $_FILES;}


а зашита от инъекции? Банально зашита ж должна быть? Или я чего-то не понимаю?
 
 Top
Vladimir Kheifets
Отправлено: 12 Ноября, 2020 - 11:09:56
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Lolya пишет:
Vladimir Kheifets пишет:
Добрый день!
Лучше заменять в коде всё, что не актуально в PHP7, например, $HTTP_GET_VARS, $HTTP_POST_VARS,... на $_GET, $_POST,

если брать изначальный код, то get_magic_quotes_gpc более не существует и надо все упоминания о нем удалить, это я прочла на форумах программирования. То-есть, от кода останется только:

PHP:
скопировать код в буфер обмена
  1. if(!isset($HTTP_POST_VARS) && isset($_POST)){$HTTP_POST_VARS = $_POST;$HTTP_GET_VARS = $_GET;
  2. $HTTP_SERVER_VARS = $_SERVER;$HTTP_COOKIE_VARS = $_COOKIE;$HTTP_ENV_VARS = $_ENV;$HTTP_POST_FILES = $_FILES;}


вы предлагаете сделать так ? :

PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST) && isset($_POST)){
  2. $_POST= $_POST;
  3. $_GET= $_GET;
  4. $_SERVER= $_SERVER;
  5. $_COOKIE= $_COOKIE;
  6. $_ENV= $_ENV;
  7. $_FILES= $_FILES;}


а зашита от инъекции? Банально зашита ж должна быть? Или я чего-то не понимаю?

я не предлагал, писать $_POST= $_POST;...
То что, Вы нашли на форумах, предлагается для того , чтобы не заменять переменные
$HTTP_POST_VARS, $HTTP_GET_VARS, и.т.п., которые используются в скриптах.
Советую этого не делать, а использовать в кодах суперглобальные переменные
https://www.php.net/manual/ru/la...superglobals.php
Смотрите сообщения об ошибках и ищите чем предлается заменить в PHP7.
см.https://www.php.net/manual/en/migration70.php
Удачи!

(Отредактировано автором: 13 Ноября, 2020 - 07:50:34)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB