有没有办法配置PHP /服务器(通过Nginx php-fpm)来阻止从php file_get_contents执行javascript?
现在,如果我允许用户上传嵌入了js的html文件,那么当通过file_get_contents()调用显示文件时,JS就会被执行。
我计划添加HTML过滤(即拒绝html上传),但如果我可以在输出上有第二层安全性,而不仅仅是在上传中(如果第一层未能采用帐户如此情况)。
由于
答案 0 :(得分:2)
感谢jcubic提供一个链接,解释为什么他的解决方案不起作用;)
我所知道的只有两个强大的解决方案:
1)使用HTML以外的标记语言,它具有可证明的语法并且不允许嵌入式脚本(BBCode?)。这符合still requires that you validate the submission,但比HTML更简单。
2)应用不允许内联javascript的content security policy - 这将是我首选的解决方案,尤其是因为您可以指定报告网址,允许您监控浏览器上发生的事情而不是依赖在服务器上过滤。
答案 1 :(得分:-1)
您可以尝试在回显文件内容之前删除JavaScript:
echo preg_replace("%<script[^>]*>.*</script>%si", "", file_get_contents());
或者您可以在上传文件时拨打此电话,这样您就不必每次都这样做。
您可能还想删除具有javascript:
协议网址的onclick和样式等事件,以删除那些使用xml解析器可能更好的事件。
以下是您可以考虑的XSS矢量攻击列表:XSS Filter Evasion Cheat Sheet