2

他们是否有关于在 url 中使用类名和/或参数的任何安全问题?

我创建了一个简单的 PHP 页面路由器来路由路径,例如:

www.mysite.com/classname/methodname/param1/param2/etc/etc

透露我的类和方法的名称有什么危险吗?还是应该在类方法中进行足够的过滤以使其不成问题?

此外,我的 AJAX 调用将以相同的方式路由。为了确保合法的 AJAX 调用,我能否以某种方式生成每次调用时都会更改的会话令牌。例如,在 AJAX 访问的 PHP 脚本中生成了一个随机数,该随机数也是由调用发送的。如果它们匹配,则它是一个授权请求。唯一的问题是我如何让它们匹配?

4

1 回答 1

2

最大的安全问题是您不会盲目地包含类名,例如:

require_once('classes/' . $_GET['class'] . '.php');

以上将是一个易受攻击的示例,因此请务必验证您包含的类名或任何文件,以避免本地文件包含漏洞。

class_exists()是不够的。我将首先对其进行验证,使其仅包含a-z. 然后使用 file_exists、class_exists 等。

我想不是所有的类和方法都会被公众通过路由使用,所以有一些系统可以检查路由器是否被允许访问指定的类和方法。这可以通过多种方式完成,例如从基类派生公开可用的类,例如BaseController检查所包含的类是否派生自该基类,或者只是将控制器保存在内部类的单独目录中,并控制类内的访问如所须。

至于揭示你的类和方法——这并不是一个真正的问题,事实上它是大多数 MVC 框架的工作方式。确保验证作为用户输入的所有内容。

对于您的 AJAX 建议,是的,可以通过将令牌存储在会话中来完成,这样您就可以在调用时检查它是否匹配。不过,我认为这不会增加很多安全性。通常,AJAX 服务提供的数据与页面上可用的数据相同。

于 2012-11-26T07:24:49.167 回答