C# 跨站点脚本的可能性?

C# 跨站点脚本的可能性?,c#,security,xss,C#,Security,Xss,如果我传递这个值 return String.Format(CultureInfo.InvariantCulture, "<input type=\"hidden\" id=\"{0}\" post=\"True\" type=\"{1}\" value=\"{2}\" />", controlId,type,post) return String.Format(CultureInfo.InvariantCulture,”,controlId,type,post) 对于文本框,这

如果我传递这个值

return String.Format(CultureInfo.InvariantCulture, "<input type=\"hidden\" id=\"{0}\" post=\"True\" type=\"{1}\" value=\"{2}\" />", controlId,type,post)
return String.Format(CultureInfo.InvariantCulture,”,controlId,type,post)

对于文本框,这是否向XSS公开?由于我是新手,有人能帮我吗?

即使通过此代码,也可以伪造跨站点脚本

尝试以下方法:

  • 在页面中创建一个名为say token的隐藏变量
  • 将唯一的随机值字符串传递给隐藏变量,并将该值存储在会话中
  • 对于每个命中服务器的请求,请检查会话和令牌隐藏字段中的值是否相同 如果会话和令牌中的值不相同,这意味着它可能是XSS攻击。如果它们是相同的,这意味着你有一个良好的反应


    谷歌还有其他应对措施。

    一个好的起点是


    基本上,XSS是一个难题。如果您不需要在页面上允许html,请不要这样做。对输入进行适当编码。不要试图手动筛选内容。这很难,也很容易出错。请使用经验证的库,或者从代码中阻止所有html。

    不清楚您的
    控件ID
    类型和
    post
    变量来自何处

    return String.Format(CultureInfo.InvariantCulture, "<input type=\"hidden\" id=\"{0}\" post=\"True\" type=\"{1}\" value=\"{2}\" />", controlId,type,post)
    
    为了使它们对HTML安全,必须使用
    Server.HtmlEncode()
    函数。您的代码的安全版本是:

    return String.Format(CultureInfo.InvariantCulture, "<input type=\"hidden\" id=\"{0}\" post=\"True\" type=\"{1}\" value=\"{2}\" />", Server.HtmlEncode(controlId), Server.HtmlEncode(type) , Server.HtmlEncode(post))
    
    返回String.Format(CultureInfo.InvariantCulture,”,Server.HtmlEncode(controlId),Server.HtmlEncode(type),Server.HtmlEncode(post))
    
    这将防止任何人在任何变量中输入
    字符并从HTML字符串中中断(它将成为
    ,并由浏览器呈现为

    @Vineet Verma的回答涉及到,这与我们的回答完全不同

    @akirilov的回答建议对输入进行编码。我认为这是错误的,因为输入只有在输出时才是不安全的。例如,输出到JSON需要对HTML进行完全不同的编码。这就是为什么您通常应该允许任何输入到您的应用程序中,但在输出时进行编码。请查看并在输出时遵循他们的指导原则根据不同的上下文进行分类


    输入验证只适用于您可以轻松验证的内容(如社会保险号)。验证输入是否不包含有害的JavaScript代码要困难得多。这就是为什么最好在输出时进行编码,这样可以使您的应用程序免受攻击。

    似乎您的答案与CSRF保护有关,而不是XSS
    return String.Format(CultureInfo.InvariantCulture, "<input type=\"hidden\" id=\"{0}\" post=\"True\" type=\"{1}\" value=\"{2}\" />", Server.HtmlEncode(controlId), Server.HtmlEncode(type) , Server.HtmlEncode(post))