gpt4 book ai didi

javascript - 防止对表单进行 XSS 攻击

转载 作者:行者123 更新时间:2023-11-30 00:19:55 25 4
gpt4 key购买 nike

全部:

我在使用 C# MVC4 进行的项目中遇到问题

在项目中,我是从用户那里接受一个URL等参数,然后做一些处理,把处理的结果发送到服务商提供的URL用户。

使用以下代码发送结果:

var context = HttpContext.Current;

context.Response.Write("<html><head>");
context.Response.Write("</head><body>");

context.Response.Write(string.Format("<form name=\"myform\" method=\"post\" action=\"{0}\" >", postUrl));

context.Response.Write("</form>");
context.Response.Write("<script type=\"text/javascript\">document.myform.submit();</script></body></html>");

context.Response.Write("</body>");
context.Response.Flush();
context.Response.Clear();
context.ApplicationInstance.CompleteRequest();

每当用户尝试 XSS,例如传递 javascript%3aalert('xss')%2f%2f 的 url 值时,JavaScript 就会运行并显示弹出窗口。

我试过 Antixss.HtmlEncode() 在将 URL 传递到 string.Format 之前对其进行编码,但仍然不起作用。我也尝试过 Antixss.UrlEncode(),但这会出错,因为表单不会提交到 URL。

请帮帮我,有什么我想念的吗?我还能做什么?

提前致谢。

最佳答案

您需要三管齐下的方法来解决这个问题。

防止 XSS 注入(inject):

请注意,如果用户输入了 url 值

" /> <script>alert('xss')</script>

这也会让你变得脆弱:

<form name="myform" method="post" action="" /> <script>alert('xss')</script>" >

因此你应该使用 HttpUtility.HtmlAttributeEncode函数来解决这个问题。

但是,不要止步于此。如前所述,您应该针对 javascript: 样式的 URL 进行投影。为此,我会确保 URL 以 http://https:// 开头。如果不是,抛出一个 SecurityException,您应该在服务器端记录和处理它,并向用户显示自定义错误页面。

最后,您想防范 Open Redirect Vulnerabilities .这是为了通过将用户重定向到其他域来阻止网络钓鱼攻击。同样,使用白名单方法并确保重定向到的域是您自己的域。请注意此处的解析,因为它很容易出错 - http://example.org?http://example.com 的 URL 将通过 的验证过滤器example.com 关于许多编写错误的验证例程。我建议在 .NET 中使用 Uri 对象并通过它检索域,而不是滚动您自己的字符串函数。

您还可以检查该 URL 是否为相对 URL,如果可接受则允许它。使用类似 this function 的东西它使用内置的 .NET 库来确保它是否是相对的。

关于javascript - 防止对表单进行 XSS 攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com