php - PHP 脚本中的 XSS 漏洞

标签 php xss

我一直在到处寻找,试图找到解决这个问题的办法。我最近一直在我们的网站上运行扫描,以发现 XSS 和 SQL 注入(inject)的任何漏洞。有些项目引起了我的注意。

用户输入的任何数据现在都使用 filter_var() 进行验证和清理。

我现在的问题是 XSS 和操纵 URL 的人。似乎无处不在的简单方法是:

http://www.domainname.com/script.php/">< script>alert('xss');< /script >

然后这会更改一些 $_SERVER 变量并导致我的所有 CSS、链接、图像等的相对路径无效,并且页面无法正确加载。

我清除了脚本中使用的所有变量,但我不确定如何移除 URL 中不需要的数据。

提前致谢。

添加: 然后这会在模板文件中产生一个简单的链接:

<a href="anotherpage.php">Link</a>

实际链接到:

"http://www.domainname.com/script.php/"><script>alert('xss');</script>/anotherpage.php

最佳答案

This then changes some of the $_SERVER variables and causes all of my relative paths to CSS, links, images, etc.. to be invalid and the page doesn't load correctly.

这听起来您的网站犯了一个大错误,您应该重新考虑如何将输入中的链接信息注入(inject)到输出中。

单独过滤输入在这里无济于事,您还需要过滤输出。

如果您的应用程序收到的请求与允许请求的超集不匹配,通常会更容易返回 404 错误。

I am not sure how I get around removing this unwanted data in the URL.

其实请求已经发送过了,所以URL已经设置好了。你不能“改变”它。这只是所请求的信息。

现在您有责任处理它,而不是再盲目地传递它,例如进入您的输出(然后您的链接被破坏)。


编辑:您现在更具体地写下了您所关注的内容。我会在这里和 dqhendricks 合二为一:谁在乎?

如果您真的对用户只是使用她的浏览器并输入她随意输入的任何 URL 这一事实感到不舒服,那么,技术上正确的响应是:

400 Bad Request (ref)

并返回一个没有或只有完全限定的 URI(绝对 URI)或重新定义 Base-URI 的页面,否则浏览器会将输入到其地址栏中的 URI 作为 < em>基本 URI。参见 Uniform Resource Identifier (URI): Generic Syntax RFC 3986; Section 5. Reference Resolution­Specs

关于php - PHP 脚本中的 XSS 漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764696/

相关文章:

php - 在 Laravel 中使用 PHPUnit 测试上传

javascript - 我的网站正在加载其他网站,导致它重定向到它

javascript - 检查输入并将其转换为适当的类型以防止 XSS

java - 当脚本显示在 HTML 文本区域中时,是否可能发生 XSS 攻击?

使用 ckeditor 预防 xss

PHP 对象损坏,$this 未定义

php - Laravel Pluck - 如何获得多个字段

php - 拼写检查并在 PHP 中建议正确的单词

php - 如何检查是否从我自己的域/服务器调用我的 PHP 脚本?

java - 如何清理 HTML 用户输入并删除所有可能的脚本?