3

在我的网站上,一些黑客正在输入坏词。防止这种情况的最佳方法是什么?

我使用 ASP.NET、C# 和 SQL Server 作为资源。

  1. 检查表单后端的坏词?
  2. 检查javascript中的坏词?
  3. 插入前检查存储过程中的坏词?

我认为第一种方法是最好的。

请告知此检查的优化代码

现在我正在使用这种方法

    var filterWords = ["fool", "dumb", "couch potato"];
    // "i" is to ignore case and "g" for global
    var rgx = new RegExp(filterWords.join(""), "gi");

    function wordFilter(str) {          
            return str.replace(rgx, "****");           
    }

    // call the function
    document.write("Original String - ");
    document.writeln("You fool. Why are you so dumb  <br/>");   
    document.write("Replaced String - ");
    document.writeln(wordFilter("You fool. Why are you so dumb"));   
4

3 回答 3

2

您应该在服务器端签入 ASP.NET 代码。JavaScript 或任何其他客户端检查都可以轻松解决。您发布的代码工作正常,只是它不是特别健壮(各种简单的拼写错误都会绕过它)。

于 2013-03-13T05:04:18.120 回答
1

确保检查排列,例如

安全 --> $3(ur3

我会用类似的东西代替这个词

[删除] 或 [审查]

像 s***t 这样的词仍然可以被视为对客户/其他人的冒犯。

编辑:在这里看到 HevyLight 对 javascript 使用的想法......你可以在你的 C# 层中尝试一个字符串过滤器(假设它已经在做繁重的工作和数据库调用)。在写入数据库之前通过过滤器传递所有字符串帖子(并供其他人查看)。

于 2013-03-13T05:00:33.423 回答
0

现实情况是,你无法 100% 阻止坏话。我会在服务器端进行两步验证(可以禁用 JS,SQL 并不适合处理此问题)

  1. 创建一个最常用的坏词列表——这可能会捕获所有输入的 80%。

  2. 为嫌疑人创建一个模式列表,这些模式将向您发出手动验证这些信号的信号。

    这可能是模式,例如

    • a) 单词包含两个或多个 ** 字符
    • b) Word 包含字母和下列字符之一 0,3,$, and others

随着时间的推移,您只需更新两个列表即可。同样,这不会解决 100% 的情况,但如果实施得当,它可能会捕获并修复 95% 的情况。

于 2013-03-15T12:01:07.317 回答