如果用户只查看自己的数据,是否存在跨站脚本攻击风险?

3
如果我的网站只允许用户查看他们自己提交的数据,并且永远不会查看其他用户提交的数据(即没有一般的“帖子”等)-那么我的网站实际上存在XSS风险吗?
我仍将致力于解决XSS问题(如httmlspecialchars()等),但我想知道攻击者能否通过查看自己的XSS攻击而获取任何东西?

1
无论如何,当将变量数据放入HTML时,您应始终使用htmlspecialchars(),否则您可能会遇到破损的HTML和其他问题。 - Brad
好的 - 谢谢 Brad - 我正在实现它,因为正是出于这些原因。 - Laurence
3个回答

6
攻击者无法通过使用跨站脚本技术来获取任何信息。跨站脚本的目的是以恶意方式操纵向用户显示的页面元素,无论是钓鱼还是读取Cookie。换句话说,攻击只能影响客户端实体。
然而,重要的是要记住“用户仅查看自己的数据”的含义。
假设我有一个网站,用户可以拥有一个私人资料,只有他们自己可以查看。页面上有一个文本输入元素,允许用户输入他们的网站URL。现在假设更新用户资料的表单使用GET方法。
页面更新提交可能如下所示:

http://www.example.com/privateprofile.pl?action=update&userwebpage=http://www.example.net

攻击者可能会利用这一点欺骗用户加载URL:

http://www.example.com/privateprofile.pl?action=update&userwebpage=[malicious_js_code_here]

当然,这只是一个相对简单的例子,但希望它能够演示一般概念。问题在于攻击者可能会诱使用户自己输入XSS代码,因此存在风险。当然,此类XSS攻击的可行性取决于您具体的实现方式。


但这是一个URL修改 - 我永远无法阻止他们点击链接 - 这似乎更像CSRF - 而我已经有了保护措施(即,如果他们没有请求特定表单,则拒绝表单提交)? - Laurence
1
我所举的例子只是说明如何潜在地对你所描述的系统进行攻击。很高兴听到你已经采取了反跨站请求伪造措施。如果实现正确,你所描述的系统可能是安全的,但除非有特定需要允许非编码用户输入,否则我会谨慎行事。 - Jared Ng
可能不是一个表单。例如,您可以在页面编号中遭受XSS攻击。没有填写请求第二页的表格。但攻击者可以在URL中使用JavaScript代替数字。 - Ha.

1

如果所有数据都是私密查看的话,那么就没有真正的风险。XSS 的整个目的是通过驱动-by 来劫持会话或其他用户浏览器中的个人信息。如果没有这样的机会,那么 XSS 就不存在。


这是错误的。请查看另外两个答案以了解原因。 - Brad
2
不,它绝对是正确的。被接受的答案根本不是XSS攻击;它更像是钓鱼而已。 - Jordan
1
好的,所以XSS需要两个条件:漏洞和公开显示的用户可编辑页面。被接受的答案是牵强的,因为你不能仅通过链接更新个人页面。你还需要登录。这也是原始问题的表述方式,因此如果没有公开可见但用户可编辑的数据,则不存在XSS风险。 - Jordan

1

是的-这根本不保护你。实际上,这是正常情况。你必须考虑的是,如果黑客可以通过URL在你的站点中植入XSS,然后说服其他人打开该URL,那么你用户的数据(cookie、密码等)就会被窃取。


但是,如果用户A在他们的数据中植入了XSS,只有他们自己能看到-那么用户B如何实际上显示该数据?唯一的方法是如果用户B以用户A的身份登录,即使这样,他们仍然只能看到用户A的数据。 - Laurence
即使只有用户A可以看到页面,一旦用户B能够插入代码,那就结束了。他可以编写一些Javascript来跟踪用户A的按键、获取cookie信息等,并通过Ajax调用将其发送到用户B的某个服务器上。 - McGarnagle
但是用户B如何才能获取到用户A的数据呢?他们必须以用户A的身份登录才能首先将其种植吗?因此,他们已经拥有了对数据的完全访问权限? - Laurence
1
@Laurencei 不是这样的... 如果用户B引导用户A点击您网站URL的XSS修改版本,那么用户A将像往常一样自己登录,毫不知情地注入了恶意代码。 - McGarnagle
但这是一个URL修改 - 我永远无法阻止他们点击链接 - 这似乎更像CSRF - 而我已经有了保护措施(即,如果他们没有请求特定表单,则拒绝表单提交)? - Laurence
1
这就是 XSS 的全部意义。当然,你永远无法阻止用户点击链接 - 这就是为什么你必须验证任何输入到你的网站(查询字符串、表单提交),并确保不会天真地将这些参数注入到你的 DOM、SQL 语句等中。 - McGarnagle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接