我们应该清理传递给action方法的非字符串参数吗?

xpo*_*ort 2 asp.net-mvc

对于字符串参数,我们必须在action方法中对它们进行清理,如下所示:

public ActionResult Browse(string genre)
{
        string message = HttpUtility.HtmlEncode(genre);

        return View(message);
}
Run Code Online (Sandbox Code Playgroud)

是否有必要如下消毒非弦乐参数?

    public ActionResult Details(int id)
    {
        int data = int.Parse(HttpUtility.HtmlEncode(id));
        return View(data);
    }
Run Code Online (Sandbox Code Playgroud)

Lev*_*evi 5

就个人而言,我建议在视图中清理这些输入.如果您使用的是WebForms视图引擎,则可以使用它<%: ... %>来执行此操作,或者如果您使用的是Razor,则可以使用@运算符.这也使得数据流通过系统视图独立,因此您可以更轻松地共享数据和模型.

例如,在将数据存储在数据库中之前对HTML编码数据使得很难在将来某个日期创建将数据作为CSV文件输出的视图.如果视图负责执行此操作,则视图可以选择适合其自己的应用程序的CSV编码或HTML编码.

  • @xport - 如果您正在使用LinqToSql,EF或其他类似的ORM框架,他们会代表您处理转义输入字符串.如果您手动生成INSERT语句,请使用参数化SQL(http://www.bing.com/search?setmkt=en-US&q=parameterized+sql)来防止SQL注入.Parameterized SQL的特定语法取决于您的数据层. (3认同)