安全地捕获搜索输入的URL编码字符串?

时间:2015-01-17 07:16:10

标签: php drupal

我基本上有一个带输入的搜索表单:

<input type="text" name="search" />

这最终会将用户发送到:

/search/[URL_ENCODED_STRING]

所以,如果他们搜索

http://www.stackoverflow.com/

网址将是:

/search/http%253A%252F%252Fwww.stackoverflow.com%252F

我的问题在于知道我之后阅读的输入是否安全。然后我会在搜索页面上使用Drupal读取值的固有方法(arg(1))。但即使没有drupal,结果也必不可少。我最终会:

$variable = urldecode($input);

如果我打印出$ variable,它会显示:

http://www.stackoverflow.com/

我的问题是,在SQL中使用它之前,我必须对此字符串应用什么样的清理?它只是“addslashes”吗?或者我应该删除所有非字母数字和数字值?

注意

我还没有达到那个部分,但我相当确定如果我将这个变量传递给内置搜索功能,Drupal会应用它自己的清理,但我仍然想知道正确的方法是什么清理此输入以避免恶意用户在网站上做出奇怪的事情。

更新

我接触了部分,Drupal确实处理了准备好的声明部分。但我仍然不知道在打印时如何清理字符串:

<div id="searchedFor">
    <span class="preLabel">You searched for</span>
    <h2><?php print $_REQUEST['search']; ?></h2>
</div>

打印出来的最正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

要清理页面,请使用htmlentities()strip_tags()htmlspecialchars()

<div id="searchedFor">
    <span class="preLabel">You searched for</span>
    <h2><?php echo htmlentities($_REQUEST['search'], ENT_QUOTES); ?></h2>
</div>

示例:

<?php echo htmlentities("<script>NastyJS('code');</script>", ENT_QUOTES); ?>
<!-- Shows in browser this way -->
<script>NastyJS('code');</script>
<!-- but shows in source this way -->
&lt;script&gt;NastyJS(&#039;code&#039;);&lt;/script&gt;