2

可能重复:
在 PHP 中清理文件路径

我有一个看起来像这样的 php 脚本:

$search = $_REQUEST['search'];
$xml = simplexml_load_file("SOMEURL/search?q=".$search);

我想知道通过更改搜索参数来阻止人们尝试加载文件或网页的正确方法是什么。

我完全了解 SQL 注入问题并知道如何处理它们,但我不确定使用用户输入保护文件位置的最佳方法。

我期待着您的回复。

编辑

我正在为这个问题添加更多详细信息,因为它被标记为一个没有回答我所追求的帖子的重复。

我在 Linux 机器上有一个 php 脚本,它使用 simplexml_load_file 来查询在 Windows 机器上运行的 SEARCH ENGINE Java(不是 javascript)脚本。用户可以将搜索词更改为用户希望的任何内容,因为它是搜索引擎。Windows 框上的脚本返回 XML,然后 PHP 代码将其用于显示目的。

我想确保用户不能更改 Search 参数来加载另一个 url 或文件。

4

1 回答 1

1

您将无法阻止“搜索”参数被用户/可能成为攻击者的人更改。您可以并且应该做的是将输入验证为有效值列表。如果您的列表很小且是静态的,则这可能是一个简单的数组:

$validSearchValues = array(
    'foo',
    'bar',
);

$search = $_REQUEST['search'];
if (! in_array($search, $validSearchValues)) {
    //anything other than foo or bar will reach this point
    echo 'invalid input';
} else {
    //only foo or bar values will reach this point
    $xml = simplexml_load_file("SOMEURL/search?q=".$search);
}

对于较大的值列表,您可以将它们存储在数据库中并发出查询以检查其有效性。

这个例子是基本的。有几个框架和组件具有很好的输入验证方法,您应该研究它们(检查 Zend Framework 或 Symfony)。

于 2012-12-02T23:08:24.900 回答