Php 这是XSS-ed吗?

Php 这是XSS-ed吗?,php,xss,Php,Xss,编辑:我的问题不是我已经知道如何防止XSS,而是用户是否可以绕过双引号删除。不过谢谢你:) 这是否易受XSS攻击: <img src="" alt="<?php echo str_replace('"', '', $_POST['imageDescription']);?>" title="Image"> “title=“Image”> e、 g如果用户键入警报(‘黑客’)这将不起作用,因为双引号被去掉了,但这仍然可以是XSSE吗? 我总是验证数据,但我只是想知道。中

编辑:我的问题不是我已经知道如何防止XSS,而是用户是否可以绕过双引号删除。不过谢谢你:)

这是否易受XSS攻击:

<img src="" alt="<?php echo str_replace('"', '', $_POST['imageDescription']);?>" title="Image">
“title=“Image”>
e、 g如果用户键入警报(‘黑客’)这将不起作用,因为双引号被去掉了,但这仍然可以是XSSE吗? 我总是验证数据,但我只是想知道。

中的一篇文章解释了这一点。显然,如果替换双引号,就不可能在alt映像中使用XSS

但是,在处理潜在的安全问题时,最好不要重新发明轮子。使用经过验证的方法

将PHP数据回显为HTML时,请使用
htmlspecialchars()
,以便将任何HTML符号转换为非危险字符


有关如何避免XSS攻击的更多信息,请参见。

是的,它仍然容易受到XSS攻击。有很多技术可以挫败这一点,当然还有很多我不知道的。有一件事我相当肯定可以被滥用来规避,那就是发送无效的UTF-8。当您运行代码(或通过其他方式)时,它将被转换为有效的“字符”。因此,不仅可以规避您的努力,还可以依靠它们来完成XSS攻击。
当然这需要更多的工作,但是那些做这类事情的人并不介意额外的工作

你在这里所做的被称为“黑名单”,这意味着你已经删除/禁止了你认为有害的东西。这种方法的问题是,你必须知道一切有害的东西,无论是现在还是将来,这样才能有效。当然,没有人能做到这一点。
这种同级方法被称为白名单,在这种方法中,您只允许输入您知道您想要的内容。确保恶作剧的空间尽可能小,并且在某些情况下完全消失(如果列表足够小的话)


但是,这些都不能100%确保避免XSS攻击。唯一可以做到这一点的是输出转义。对于HTML,执行此操作的函数是
htmlspecialchars()

,并特别注意它的注释。< /P>如何使用单一引用在以双引号分隔的ALT属性的中间注入XSS攻击?(使用<代码> HTMLPrimeCARS 仍然是最佳实践).我错了。我自己测试了它,但它不能工作。我的意思是,你不能像那样注入,因为
str\u replace
“可能不是通过使用你在示例中使用的方法,而是通过其他方式。“-还有别的办法吗?如果你不能说出一个,那你只是在猜测。如果你逃避双引号,似乎没有办法做到这一点。我很抱歉。查看编辑后的答案。如果POST字符串属于某个字符集,则可以通过删除看似是
”的内容来生成某些字符,剩下的可能是“半个字符”“这些字符本身可以是有效的ascii字符。这就是
mysqli\u escape\u string
可以回避的方式。还要注意的是,
str_replace
不会对文本的任何部分执行两次,如果删除一个
留下另一个
,则默认情况下不会删除。可能重复的@Martin请阅读我的编辑您的问题是在特定情况下如何防止XSS。如果您已经知道如何防止XSS,那么为什么不在这个问题上使用该方法呢?如果发布的数据是某个模糊的字符集,并且发布的数据是以某种方式格式化的,则可以绕过双引号字符串替换,但是这些尝试通过遵循在另一个引用的原始问题上给出的建议而无效。改进(这有点过火):1)使用
mb_string
将PHP和HTML字符集设置为UTF-8。2) (忽略因此而损坏的奇数字符集,无论如何都不应提交它们),3)使用正则表达式替换符替换引号,而不是字符串替换。@Martin No:我总是验证数据,但我只是想知道。我已经使用了UTF-8字符集。然而,我很想知道双引号删除是否可以被绕过,因为像>和<字符没有被编码在ALT属性内(不是在我的网站上,而是出于教育目的)“是的,它仍然易受XSS的影响。”-怎么?昆廷我更新了我的帖子来解释至少一个可能的攻击向量。