我有一个配置.php文件,其中包含一个数组(将作为PHP ),该文件包含以下内容:
<?php
return array(
'api_key' => 'e3awY0HoZr0c6L0791Wl2dA3',
'user' => 'Lequis',
'timeout' => '4'
);这些文件是由用户上传的,我想验证用户没有添加任何恶意代码,因为这些文件只包含一个数组,所以我想验证它实际上只是一个数组
发布于 2016-01-20 22:17:44
编辑:见@VolkerK关于如何防止恶意代码注入的评论。
就像@Jay所说的那样,更好的做法可能是考虑一种更合适的数据结构,比如JSON。但是,如果您确实希望坚持这种结构,可以使用PHP的is_array() (http://php.net/manual/en/function.is-array.php)函数在尝试将该数组传递给任何其他函数之前验证变量是数组。
这只会验证您确实有一个数组,而不是您的数组是否具有正确的格式。为了更进一步,您可以使用count() (http://php.net/manual/en/function.count.php)函数验证数组的大小是否正确,这两件事的结合将确保数组中存储的值数目是正确的。
检查数组值是否采用正确的格式是另一回事。您可以运行所有的键,并将传递的键与可接受的键数组进行比较,如下所示:
function isValidArr($usrArr){
$apiParams = array('api_key', 'user', 'timeout');
for($i = 0; i < count($usrArr); $i++ {
if(!strcmp($usrArr[$i], $apiParams[$i])) {
return false;
}
}
}然后,为了检查与每个键相关联的值,我假设api_key是一个特定长度或范围内的值,因此您可以对照它进行检查。对于超时,可以确保值是整数。要根据用户名进行验证,可以实现regex,以确保该值符合特定的格式。
发布于 2016-01-20 22:11:49
我不知道你想检查什么,数组还是值?
如果数组,那么,我认为您可以使用简单的is_array($arr)功能。
如果值,则有一个很好的Symfony组件SymfonyOptionsResolver。
您可以将其用作值类型/值等的验证器。
public function configureOptions(OptionsResolver $resolver)
{
// ...
$resolver->setAllowedTypes('host', 'string');
$resolver->setAllowedTypes('port', array('null', 'int'));
}或者在preg_match中使用规范化和检查值。
public function configureOptions(OptionsResolver $resolver)
{
// ...
$resolver->setNormalizer('host', function (Options $options, $value) {
if ('http://' !== substr($value, 0, 7)) {
$value = 'http://'.$value;
}
return $value;
});
}查看文档以获得更多信息。
这就是你要找的吗?
https://stackoverflow.com/questions/34911461
复制相似问题