我有一个客户的网站,不知何故不断被XSS注入攻击。这些XSS攻击在横幅部分中没有失败,横幅广告需要有<script>
个标记才能运行。
我仍在试图找出这种情况发生的地点和时间(这是一个巨大的网站,编码很糟糕(对不起,以前的家伙......)而且我真的被淹没了。所以,同时,我想要执行一个正则表达式来删除插入的部分标记。
所以,如果脚本应该是:
<script src="valid_script.js"></script>
黑客只是这样做:
<script src="valid_script.js"></script>
<script src="invalid_script.js"></script>
我需要正则表达式删除包含“invalid_script.js”的脚本标记(可能有多个匹配项),但保留包含“valid_script.js”的标记。
我的问题:您可以请专家在那里告诉我该怎么做这个正则表达式?我很抱歉,但是我不懂正则表达式,我很难理解,但这是我的想法: - (
答案 0 :(得分:1)
如果您要在$content
变量中输出文本(包含好的和坏的脚本),请注意所有注释,如您所述,回答您的问题,然后以下正则表达式将删除坏处:
$content = preg_replace('#<script[^>]*invalid_script\.js[^>]*></script>#s', '', $content);
这简单地说,按顺序查找以下内容:<script
,一串非>
个字符,invalid_script.js
,一串非>
个字符,和></script>
。
但是要重申所有的评论,这可能会被解决,当然只是一种粘贴。