代码之家  ›  专栏  ›  技术社区  ›  Troy Hunt

为什么DotnetNuke禁用验证?

  •  5
  • Troy Hunt  · 技术社区  · 14 年前

    有人能解释一下为什么DotnetNuke配置了请求验证和事件验证禁用吗?它们都在web.config级别关闭,用于默认安装,这似乎是一种回归方法。是否有合理的原因,如果重新打开,对DotnetNuke的功能影响是什么?

    显然,在代码中应该进行适当的输入验证,但本机.NET框架行为始终是一个不错的回退。

    更新: 对此的进一步思考 Request Validation, DotNetNuke and design utopia

    2 回复  |  直到 14 年前
        1
  •  4
  •   Troy Hunt    14 年前

    事实证明,为了方便通过富文本控件提交HTML内容,DotnetNuke的工作人员禁用了此功能。通过设计关闭请求和事件验证。

    如果需要的话,我宁愿在页面级别看到这一点。全局验证决不能免除开发人员在其捕获的每个点上验证输入,但我仍然认为拥有此功能是很好的保险,禁用它确实会造成风险。i_d非常感兴趣,看看有多少dnn站点由于没有全球验证和糟糕的开发实践而存在XSS漏洞。

        2
  •  4
  •   rook    14 年前

    对所有输入进行全局验证是一种糟糕的做法。与大多数应用程序一样,DotnetNuke在输入验证的基础上逐函数工作。

    易受攻击的代码的创建高度依赖于用户输入的使用方式。例如,SQL注入和XSS都依赖非常不同的控制字符。SQL注入可能是由于未过滤三个字符中的一个而导致的 '"\ ,因为大多数XSS都是由未筛选引起的 <> 例如,使用控制字符时,此代码容易受到SQL注入的攻击,因为它在ID周围没有引号:

    SqlCommand("SELECT username FROM users where id="+id)
    

    全局输入验证(如PHP下的magic_quotes_gpc)也将 为了防止这种类型的攻击,这也是为什么它在php6中被移除的原因之一。