2014-01-27 51 views
0

我想执行一个PHP文件exec来处理后台进程,其中1234567是我希望从数据库中调用以获取一些信息的ID我要处理的是什么。PHP调用执行php文件在后台执行

exec('/var/www/somescript.php 1234567 > /dev/null &'); 

是否有任何潜在的安全问题或我遇到的问题?

对于传入的参数,我应该使用escapeshellarg()吗?

回答

0

我确定这取决于是否应该通过网络用户调用,以及如果用户创建了参数或执行的命令。

在我看来,使用escapeshellarg()应该总是被调用,因为您不会使用MYSQL_函数,也不会因为SQL注入的风险而转义任何输入。使用exec函数是一个类似的问题,你不会在不转义输入的情况下使用脚本。但是,转义输入并不能阻止人们滥用脚本。

您确实需要确认已发送到脚本的任何参数的验证,例如您不希望任何人注释掉脚本并在参数部分注入完全不同的脚本以添加用户(这不应该允许发生propper权限)。

我会用这个作为最后的手段,如果问题不能以任何其他方式解决,而不是使用exec。

+0

我有多个客户实时发送的地方,其中一个需要15 - 30秒,这是不是真的可以接受的时间。客户发送的所有其他地方我们都需要能够传回每个信息,但这可以作为后台进程传递。 该ID将来自数据库,用户无法访问此部分。我正在努力思考替代方案,pthread不是我想要在服务器上安装的东西。 –

+0

抱歉不完全确定你的意思。所以后台进程将被用来发回信息?如果您尝试使用memcached/memcache缓存数据,那么可以多次检索到的信息是一个持续不断的流? –

+0

我们为每个客户使用多种Web服务,我们只需要通过它发送数据与客户的结果无关。 –