为什么注入JavaScript代码是个坏主意

3

我有一个使用asp.net开发的Web项目。

在我的Web项目中,我有一个叫做MainPage的页面。根据查询字符串,在MainPage上最后一次用户可以看到一个调查编辑表单(www.a.com?entity=survey@op=edit)或参数插入表单(www.a.com?entity=parameter&op=add)等等。

以上查询字符串示例只是示例,因为我对它们进行了加密,实际上最后一个用户在URL上看到的是一些复杂的单词。

例如:www.a.com?saşlfas571=sflkmlm11sd&13kjn13=1378183

此外,在MainPage中,我正在加载一个名为MainPageJs的JavaScript,并根据查询字符串显示正确的js代码。

我在MainPage.cshtml中加载MainPageJs。

@section scripts{

<script type="text/javascript" src="@CustomUrl.CustomAction("MainPageJS", "Home", new { entity= entityName, op = opName })"></script>

下面的代码展示了MainPageJs的工作原理。
 ....
 string res = "";
 if (queryString == "parameter")
 {
       res = "var a = 1;";
 }
 if (queryString == "survey")
 {
      res = "var a = 2;";
 }
 if (queryString == "user")
 {
      res = "var a = 3;";
 }

 return JavaScript(res.ToString()); 

现在我想知道的是:

  1. 我的代码风格有没有安全问题?
  2. 我的网页有没有安全漏洞?
  3. 这个风格是否存在JavaScript代码注入漏洞?

2
你可能会在 https://codereview.stackexchange.com/ 和/或 https://security.stackexchange.com/ 上获得更好的回复。 - Ian Kemp
如果您直接从查询字符串中插入值并输入生成的代码,则存在严重漏洞。如果您只是像样例中那样编写代码,其中您静态确定了生成的代码,则可能是安全的,但编写此类代码的更好方法是有的。 - Aluan Haddad
3个回答

0
我的代码风格有安全问题吗?
没有。在安全角度来看,在客户端执行动态代码没有任何问题(但你仍然应该控制其性能)。
我的网页有安全漏洞吗?
没有。在客户端执行动态代码不会破坏任何东西。"动态"代码在与常规JS相同的沙盒中以相同的权限执行。
这种风格是否存在JavaScript代码注入漏洞?
有些人使用术语“JavaScript Injection Attack”来命名$( userInput ).insertAfter( .. );的副作用,当用户可以从用户输入中运行一些JavaScript(如果userInput包含<script>...</script>),但这与动态JS无关,更多地涉及动态HTML。

0
如果您在客户端加密,用户实际上可以在加密之前看到发送到应用程序的内容。有一些工具可以监视客户端活动(例如YSlow),具有技术专长的恶意用户可以使用它来检测可能存在的前端漏洞。请记住永远不要相信用户输入,并允许用户在您的应用程序中注入代码绝不是一个好选择。

0
Does my code style have any security problems?
Does my web page have any security vulnerability?
Does this style have a JavaScript code injection
vulnerability?

这完全取决于您的ASP代码实现。 从您的问题中,我没有看到大的安全问题。但是, 如果您不熟悉漏洞或安全性,我不建议使用该代码风格。

以下是一些原因。

  1. 您将URL公开给公众。 即使您对其进行编码,一些不良分子也会尝试入侵。例如,从不同的URL,黑客可以解码它。 我更喜欢隐藏它并不给他们机会。此外,您可以将URL用作更易读的搜索引擎资源。

  2. 如果您不使用框架,则可能需要实现参数过滤器以防止注入攻击(SQL、JS)。这需要时间。

  3. 很难维护代码。 由于您的代码混合了ASP和JS,因此当您的代码变得更大时,特别是当您处理像HTML与ASP代码中的JS之类的视图时,它变得更加困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接