2016-09-22 136 views
0

编辑:我的问题不是如何防止XSS,因为我已经知道如何,但它是如果用户可以绕过双引号删除。谢谢虽然:)这是XSS-ed吗?

这是容易被XSS:

<img src="" alt="<?php echo str_replace('"', '', $_POST['imageDescription']);?>" title="Image"> 

e.g如果用户键入"><script>alert('hacked');</script>这是行不通的,因为双引号被剥离出来,但这个还是可以XSSed? 我总是验证数据,但我只是想知道。

+0

可能重复的[如何防止与HTML/PHP的XSS?](http://stackoverflow.com/questions/1996122/how-to-prevent-xss-with-html-php) – Martin

+0

@Martin请阅读我的编辑 –

+0

您的问题是要求在某种情况下如何防止XSS。如果你已经知道如何防止XSS,那么你为什么不在这个问题上使用这种方法?如果POSTED数据是特定的模糊字符集,并且POST数据以特定方式格式化,则双引号字符串replace可能* *可能被忽略,但通过遵循在其他被引用的原始问题上给出的建议,这些尝试是无效的。 – Martin

回答

-1

security.stackexchange的帖子解释了这一点。显然,如果您替换双引号,则无法在alt图像中使用XSS。

但是,当您处理潜在的安全问题时,最好不要重新发明轮子。使用成熟的方法。

使用htmlspecialchars()当您将PHP数据回显为HTML时,任何HTML符号都会转换为非危险字符。

有关如何避免XSS攻击的更多信息,请参阅look here

+1

如何在使用双引号分隔的alt属性中使用单引号注入XSS攻击**? (尽管使用'htmlspecialchars'仍然是最佳实践)。 – Quentin

+1

我错了。我自己测试了它,它不能工作。我的意思是,由于'str_replace',你不能注入。 – GiamPy

+0

“也许不是使用您在示例中使用的方法,而是以其他方式使用。” - 还有其他什么方式?如果你不能命名一个,那么你只是猜测。 – Quentin

0

是的,它仍然容易受到XSS的影响。有许多技术可以阻止这一点,并授予我不知道的很多。我相当确定的一件事是可以被滥用来规避这种情况,就是发送无效的UTF-8。其中,当通过代码(或通过其他方式)运行时,然后转换为有效的“角色”,从而不仅规避您的努力,而且还依靠它们来完成XSS攻击
承认需要更多工作,但那些做这些事情的人并不介意额外的工作

你在这里所做的被称为“黑名单”,这意味着你已经删除/不允许你认为有害的东西。方法是,你必须知道所有的这是有害的,无论现在和未来,这是有效的。当然,没有人可以做到这一点。
这种叫做白名单的兄弟姐妹方法,其中你只允许你知道你想要的输入僧侣的房间越窄越好,在某些情况下完全消失(如果列表足够小)。

但是,这些都不能100%地避免XSS攻击。唯一可以做到这一点的是输出转义。在HTML的情况下,执行此操作的功能是htmlspecialchars()I recommend reading the manual for it,并特别注意它的注意事项。

+2

“是的,它仍然容易受到XSS的影响。” - 如何? – Quentin

+0

@Quentin我已更新我的帖子来解释至少一个可能的攻击媒介。 – ChristianF