【问题标题】:Replacing special characters like dots in javascript替换javascript中的点等特殊字符
【发布时间】:2012-01-13 16:44:22
【问题描述】:

我有一个来自用户的搜索查询,我想在应用到浏览器之前对其进行处理。因为我使用 SEO 和 htaccess 并且搜索 url 看起来像这样:/search/[user query] 我应该做一些事情来防止用户做淘气的事情.. :) 就像搜索 ../include/conf.php 这将导致放弃我的配置文件。我想处理查询,例如删除空格、删除点(这会导致问题)、逗号等。

var q = document.getElementById('q').value;
var q = q.replace(/ /gi,"+");
var q = q.replace(/../gi,"");
document.location='search/'+q;

第一个替换工作正常,但第二个替换我的查询混乱.. 有什么解决方案可以安全地替换这个有风险的字符吗?

【问题讨论】:

    标签: javascript string search replace


    【解决方案1】:

    所以如果我禁用 JavaScript 或使用 curl 我仍然可以做“淘气的事情”吗?在客户端做理智转义:

    encodeURIComponent(document.getElementById('q').value)
    

    并将安全检查留给服务器。你会惊讶于恶意用户可以做什么(使用一些转义序列而不是简单的. 是最简单的例子)。

    【讨论】:

      【解决方案2】:

      我会在服务器端执行此操作 - 有人很容易更改页面中的 JS 或完全关闭它。您在服务器端运行的搜索脚本不容易被篡改,然后可以一致地过滤搜索。

      您可能还想限制搜索返回的内容...如果它能够显示敏感配置文件,那么您的搜索范围可能有点过大。

      【讨论】:

        【解决方案3】:

        正则表达式中的点匹配任何东西。您需要使用反斜杠 ('\') 转义它们:

        var q = q.replace(/\.\./gi,"");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-27
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 2011-05-31
          • 1970-01-01
          • 2021-08-02
          • 2014-11-03
          相关资源
          最近更新 更多