不可利用的php函数(白名单)

不可利用的php函数(白名单),php,smarty,exploit,Php,Smarty,Exploit,是否有人准备了一份尽可能多的安全/未开发PHP函数的白名单 我正在构建一个web应用程序,用户在其中输入Smarty模板(Smarty版本3)。应用程序通过Smarty运行此模板(具有适当的Smarty_安全性),然后使用HTMLPurifier清除生成的HTML 对我来说,一切似乎都很安全,但用户需要函数,这样才能用作Smarty修饰符。我可以一个接一个地将它们列为白名单,但这需要很多努力,而且很容易出错。我只找到了一份工作 这在某种程度上是一个错误,但没有合适的答案(针对我的情况)。Smar

是否有人准备了一份尽可能多的安全/未开发PHP函数的白名单

我正在构建一个web应用程序,用户在其中输入Smarty模板(Smarty版本3)。应用程序通过Smarty运行此模板(具有适当的Smarty_安全性),然后使用HTMLPurifier清除生成的HTML

对我来说,一切似乎都很安全,但用户需要函数,这样才能用作Smarty修饰符。我可以一个接一个地将它们列为白名单,但这需要很多努力,而且很容易出错。我只找到了一份工作


这在某种程度上是一个错误,但没有合适的答案(针对我的情况)。

Smarty_Security从

$php_functions = array(
    'isset', 'empty',
    'count', 'sizeof',
    'in_array', 'is_array',
    'time',
    'nl2br',
);
为math和其他一些日期和数组内容添加(可能是安全的)操作:

$php_functions = array(
    'isset', 'empty',
    'count', 'sizeof',
    'in_array', 'is_array', 'join', 'explode'
    'time', 'date', 'strtotime', 'strftime'
    'nl2br',
    'intval', 'floatval', 'rand', 'srand', 
    'log', 'log10', 'pi', 'pow', 'sqrt', 'exp', 
    'floor', 'ceil', 'round', 'min', 'max', 'abs',
    'sin', 'cos', 'tan', 'atan', 'atan2',
);

你看到那个很棒的话题了吗?


因此,您可以在脑海中对允许函数列表和危险函数列表进行“数组区分”。

谢谢!但我正在寻找一个更大的列表-例如array\u shift,array\u pop&类似的应该也在其中。。。应该有数百个条目。但我会将您的条目添加到当前列表中。:)我不确定您是否真的想在模板中执行任何
array\u shift()
。当然,你可以从一组合理的函数开始,一旦有人需要特定的函数,就添加到列表中……RordnyReHm,合理地考虑所有“只读”函数是安全的吗?不。但可能被滥用以输出您不希望公开的文件。@rodneyrehm:我需要允许用户尽可能多地操作其变量(数组、字符串等)。我看不出数组shift()有什么问题-你知道吗?请注意,用户只看到他本地的变量。用户需要哪些函数?你还没有在你的问题中分享这一点,所以你可能应该这样做。此外,您的问题中“可利用”的含义是什么。你没有写你认为是一个漏洞。这是一个三个月大的孩子害怕这个世界,因此哭着要妈妈(一个解决办法就可以了)还是更具体一些?我同意,我在这个问题上可能有点含糊不清——但是,对可能的问题定义得很好。我基本上是在寻找一个可以避免它们的函数列表。然后对可利用的PHP函数进行否定,这可能是不可利用的PHP函数。(如果剥削的定义可以通过这种方式被明确否定,我个人对此表示怀疑,但它是一个自由的国家)这和这可能会有所帮助。谢谢,哈克雷-如果没有人可以提供预编译列表,我将用它来制作一个。。。。还有一篇有用的文章:谢谢,我在问题中提到过。然而,在所有函数和(已知)不安全函数之间进行(自动)区分并不会产生安全函数的白名单——它仍然和原始黑名单一样好(可能不完整)。我宁愿拥有一份不完整的白名单,也不愿拥有一份所谓完整的黑名单