【发布时间】:2023-03-23 08:56:01
【问题描述】:
在一个 php 文件中,我想找到所有回显某些内容但回显不包含任何 HTML 的行。这样做的目的是进行搜索替换以实现 XSS 保护。
我的测试字符串如下所示:
<?php foreach($this->userlist as $u) { ?>
<option value="<?php echo '<h1>'.$u['user_id'];?>" <?php echo $this->wfe->job['created_by']==$u['user_id']?'selected':'';?>><?php echo $u['real_name'];?></option>
<?php }; ?>
我的常规“基本”表达式是:
<\?php\secho\s(.*?)\?>
然后我尝试在我的匹配 No1 中插入各种 否定前瞻表达式:
(?!('<)) - excludes my '<h1>' tag echo successfully
(?!(\$)) - excludes my other echo statements
然而
(?!^.*<[^>]+.*) - does not exclude any of my echo statements
(?!.*<[^>]+.*) - excludes all of my echo statements
我怎样才能只排除我的 echo 语句,包括?
我在这里记录了正则表达式:https://regex101.com/r/hDufvl/2
【问题讨论】:
-
“搜索替换以实现 XSS 保护”我几乎可以保证任何针对 XSS 攻击的搜索替换解决方案都不会完整。
-
@Chris 谢谢,但这会降低风险。一旦完成自动搜索/替换,这也将与人工审核相结合