微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用正则表达式 php

如何解决使用正则表达式 php

我正在尝试在我的 PHP web 应用程序中添加全局 csrf 保护。 我正在使用 packagist 的库 csrf-magic,它依次使用 ob_start 在每个表单中添加一个 csrf 令牌作为隐藏输入,并使用一个 js 脚本在 ajax 调用添加 csrf 令牌:

<input name='csrf' type='hidden' value='...' />
<script type="text/javascript">...</script>

它使用正则表达式通过模式来实现: #(<form[^>]*method\s*=\s*["\']post["\'][^>]*>)#i 在表单中添加 csrf 令牌和: /<\/body>/ 添加js脚本

出现的问题,是js动态构建html页面的时候。例如:

<script>
var html = '
<html>
    <head>
    </head>
    <body>
        <form action="testurl" method="post">
        </form>
    </body>
<html>
';
$("#testid").html(html);
</script>

在上述情况下,输出将是:

<script>
var html = '
<html>
    <head>
    </head>
    <body>
        <form action="testurl" method="post">
            <input name='csrf' type='hidden' value='...' />
        </form>
        <script type="text/javascript">...</script>
    </body>
<html>
';
$("#testid").html(html);
</script>

因此,在这种情况下,输入中的单个撇号必须转义,</script> 中的“/”也必须转义。 我认为解决方案是检查表单或正文是否在 javascipt 上下文中以及使用了哪些撇号(单引号或双引号)来相应地转义。 是否可以通过正则表达式来实现?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。