【问题标题】:php regex negative lookahead find anywherephp regex 负前瞻查找任何地方
【发布时间】: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 谢谢,但这会降低风险。一旦完成自动搜索/替换,这也将与人工审核相结合

标签: php regex pcre


【解决方案1】:
/<\?php\s+echo\b(?:.(?!<[a-z]))*?\?>/gsi

https://regex101.com/r/hDufvl/5

我认为这可能会让您对自己的报道产生错误的认识。没有什么可以代替适当的审查。

【讨论】:

  • 我实际上已经找到了一种更好的方法来处理 XSS,但我很想知道我做错了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
相关资源
最近更新 更多