我有一个配置.php文件,其中包含一个数组( 是一个PHP数组),其中包含类似于:
的内容<?php
return array(
'api_key' => 'e3awY0HoZr0c6L0791Wl2dA3',
'user' => 'Lequis',
'timeout' => '4'
);
这些文件由用户上传,我想验证用户是否添加了任何恶意代码,因为这些文件只包含一个数组,我想验证它实际上只是一个数组
答案 0 :(得分:-1)
编辑:请参阅@ VolkerK关于如何防范恶意代码注入的评论。
就像@Jay Blanchard所说,实际上想一个更合适的数据结构(如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具有特定长度或在一个范围内,所以你可以检查它。对于超时,您可以确保该值是整数。要对用户名进行验证,您可以实现正则表达式以确保该值符合特定格式。
答案 1 :(得分:-2)
我不确定你要检查什么,一个或多个数组?
如果是数组,那么,我认为你可以简单地使用is_array($arr)
func。
如果是值,则有一个很好的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;
});
}
检查documentation以获取更多信息。
这就是你要找的东西吗?