php - Codeigniter 过滤输出以供 URL 使用

标签 php codeigniter

我可能对此想得太多,但假设我在数据库中有一个网站字段。我使用 strip_tags 来去除所有 HTML 标签。但是如果用户输入这个

javascript:alert('测试')

它会被传递,因为它是一个字符串。但是随后,HTML 将生成

<a href="<?php echo prep_url($website);?>">Website</a> //the code in view file
<a href="javascript:alert('test')">Website</a> //bad

如果单击,Javascript 将执行。还要注意 prep_url 不起作用。

有什么建议吗?我看过 HTMLPurifier,但它的大小相当大,我真的不想做一些重大改变。

谢谢

最佳答案

如果您需要 URL,则不应使用 strip_tags,您应该验证该 URL,并可能对其进行 urlencode。这是使用 filter_var 的一种方法:

$url = "javascript:alert('test')";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
// bool(false)

$url = "http://stackoverflow.com/questions/10918132";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
// string(43) "http://stackoverflow.com/questions/10918132"

因此,如果 filter_var($user_input, FILTER_VALIDATE_URL)FALSE,则不接受用户输入。这应该不需要 CI 的 xss_clean(),尽管当您将其放入 HTML 属性时您可能仍希望运行它。如果您不要求用户输入 http:// 部分,您可能需要在验证之前对输入运行 prep_url

验证 URL 的方法有很多种,只需选择您喜欢的一种即可。

关于php - Codeigniter 过滤输出以供 URL 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10918132/

相关文章:

php - Codeigniter + Chrome 错误 (ERR_RESPONSE_HEADERS_TOO_BIG)。怎么解决?

php - 看到实时变化之间的 MAMP 时间

php - 学说查询中唯一的商店ID

codeigniter - CI 中的 Razor 支付集成

php - CodeIgniter 和 PostgreSQL - 从返回 refcursor 的函数中检索数据

php - 在 CodeIgniter 中检索单行作为 EAV 模型的查询结果

php - Laravel 将项目从 Ubuntu 服务器移动到本地 XAMPP

php - 从 PHP 类中的数据库中获取数据

php - 如何正确使用 jquery 的 getJSON?

Mysql查询文章相关评论数