} <input type="submit" name="submit"/> или используя "> } <input type="submit" name="submit"/> или используя "> } <input type="submit" name="submit"/> или используя " />

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

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

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

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

13
Это ничего разумного, но я предпочитаю смотреть в глаза («по камере») на каждое переданное значение, я хочу существовать, когда хочу, чтобы он существовал и удалял его, если он не должен существовать. Я отправляю массив имен файлов, чтобы их хранить в файловой системе.
добавлено автор user1722791, источник
Как вы думаете, по сути, небезопасно передавать массив через POST? Это всего лишь данные.
добавлено автор Grant Thomas, источник
обеспечение магазина не означает, что мы запираем магазин все время .. это означает, что нужно следить за клиентом.
добавлено автор NullPoiиteя, источник
Ваше использование слова secure в этом контексте не имеет смысла. В чем вас беспокоит?
добавлено автор Alex Howansky, источник
Пожалуйста, обсудите этот вопрос. Зачем вам нужно передать массив? Какую «безопасность» вы ищете? Что содержит массив? Каков контекст приложения? С ней, как сейчас, она очень расплывчата и не даст вам хорошего ответа ...
добавлено автор ircmaxell, источник
Мне обычно нравится json_encode() вещи. Затем json_decode() с опцией true, чтобы вернуть его.
добавлено автор phpisuber01, источник
@ user1722791 Я добавил примечание о безопасности к моему ответу. Короче говоря, если вы отправляете его пользователю, вы не можете доверять ему.
добавлено автор MrGlass, источник
Если по какой-то причине вам действительно нужна дополнительная безопасность, сериализуйте этот массив во внешнее хранилище (база данных, возможно, сеанс) и пропустите только идентификатор этой сериализованной записи.
добавлено автор DCoder, источник
Если вы сильно отправляете структурированные данные между клиентом и сервером, почему бы не сериализовать его в JSON?
добавлено автор user529758, источник

5 ответы

Edit If you are asking about security, see my addendum at the bottom Edit

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

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

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

<Сильный> Добавление

I was under the impression that you were looking for a way to send the data reliably, not "securely". No matter how you pass the data, if it is going through the users system, you cannot trust it at all. Generally, you should store it somewhere on the server & use a credential (cookie, session, password, etc) to look it up.

19
добавлено

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

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 символов.

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

12
добавлено
SESSION более безопасна, чем хранить данные в типе ввода, поэтому SESSION является серверной, поэтому пользователь не может ее изменить. Согласитесь с вами @laxonline
добавлено автор Hiren Kubavat, источник
У меня есть один вопрос. Если в форме есть тысячи входных данных, будет ли то же самое работать?
добавлено автор anujeet, источник

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'),
)
?>

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

8
добавлено

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

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

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

6
добавлено
@ user1722791, и если клиент изменяет значения, которые находятся в ваших скрытых вводах, вы также можете перепутаться.
добавлено автор Neal, источник
Я просто догадываюсь. Я отредактировал свой ответ на этот факт
добавлено автор Neal, источник
После прочтения всего, кажется, что $ _SESSION является наиболее предпочтительным. Я попробую с этим.
добавлено автор user1722791, источник
Я тоже подумал об этом, но если я забуду очистить переменную $ _SESSION или если произойдет что-то, что ее предотвратит, это будет проблемой
добавлено автор user1722791, источник
Сессии и почтовые данные - это две очень разные вещи, которые должны использоваться для разных данных. Выражение просто сохраняет массив в переменной сеанса , игнорируя различия между ними. Это может быть правильно, или это может быть неправильно. Из предоставленного вопроса мы просто не можем сказать ...
добавлено автор ircmaxell, источник

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

<Сильный> XSS

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

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

This would be written into your form like so:

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

The best way to protect against this is to use htmlspecialchars() to secure your input. This encodes characters such as < into <. For example:

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

You can read more about XSS here: https://www.owasp.org/index.php/XSS

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

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

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

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

5
добавлено
Спасибо, я постараюсь постоянно это помнить.
добавлено автор user1722791, источник
Будет ли это работать только на формы?
добавлено автор user1722791, источник
htmlspecialchars() должен применяться ко всем пользовательским входам. StackOverflow, вероятно, делает что-то похожее на ваше имя пользователя: он написан везде, поэтому он не должен быть вредоносным HTML. Пользователи могут изменять любой HTML-код, на который они смотрят. Я сделал это, чтобы подделать высокий балл в одной из игр Google Olympics: sphotos-b.xx.fbcdn.net/hphotos-ash4/… Формы являются особыми, поскольку они содержат данные, которые пользователи отправляют обратно на сервер. Вам нужно проверить каждый вход, который они отправляют вам, чтобы убедиться, что это имеет смысл, или люди будут взломать ваш сайт.
добавлено автор Chris, источник
Это действительно хороший ответ, заслуживает больше голосов!
добавлено автор Alvar, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp