避免命令(shellcommand)注入下面的代码段有什么问题?

  避免命令(shell command)注入

  下面的代码段有什么问题?

   child_process.exec('ls', function (err, data) {

        console.log(data);
    });

  child_process.exec 命令调用的是 /bin/sh, 它启动了一个解释器,而非程序。

  这是有问题的,当该方法执行用户输入的一个方法,比于一个反引号或$()中的内容,一个新的命令就可能被攻击者注入。

  为了避免这个问题,你只需要使用child_process.execFile。详解。

  临时文件

  创建文件时,如处理上传的文件格外注意。这些文件可以轻松吃掉你所有的磁盘空间。

  为了解决这个问题,你应该使用Streams。

  加密你的Web应用

  不光是Node-所有的Web应用程序都应该加密。(注* https)

  跨站脚本攻击(Reflected Cross Site Scripting)

  发生这种情况时,攻击者注入可执行代码的HTTP响应。一个应用程序容易受到这种类型的攻击,它会在客户端执行未验证的脚本(主要是用Javascript写的)。它使攻击者能够窃取cookiejs代码eval加密解密,剪贴板的内容或修改页面本身。

  比如

   http://example.com/index.php?user=alert(123)

  如果这条用户查询未经过验证直接插入到DOM(HTML)中,它就会被执行。

  怎么避免

  永远不要往DOM中插入不可信的数据

  在插入前去除HTML

  防止Cookie被盗

  默认情况下js代码eval加密解密,Cookie可以通过Javascript在同一个域中读取。这样可能会被跨站点脚本攻击。而且它们还有可能被第三方的JavaScript库阅读。

  例如

   var cookies = document.cookie.split('; ');

  怎样避免

  为了防止这种情况,你可以在Cookies上使用HttpOnly,这个标签可以让JavaScript无法读取这个cookie。 (注* 比如服务器端用到的Cookie)

  内容加密策略

  内容安全策略(CSP)是一个附加的安全层,帮助检测和缓解某些类型的攻击,包括跨站点脚本(XSS)和数据注入攻击。

  CSP可以通过 Content-Security-Policy 被启用。

  比如:

   Content-Security-Policy: default-src 'self' *.mydomain.com

  注* CSP的更多内容

  这个header头信息将只接收信任的域名及其子域名的发过来的内容。

  跨站请求伪造 (Cross-Site Request Forgery)

  CSRF是一种迫使终端用户在他目前已验证授权的Web应用程序中执行其它的actions。

  这时侯问题就可能发生了,因为cookie也会发送到被请求的网站(此网站你已经被授权) - 即使当这些请求来自不同的位置。

  例如

  

  注* 此页面在另外一个域名中

  这样会直接导致这个用户信息被删除。

  怎样阻止

  为了防止CSRF,您应该实现同步令牌模式 - 幸运的是,node社区已经帮你做了。下面是它的工作原理:

  当发起一个GET请求时,服务器检查你的CSRF令牌 - 如果它不存在,创建一个

  当用户显示输入时,确保添加一个隐藏的CSRF令牌值

  当Form表单提交时,确保该值与该表单与Session中的内容相匹配

  via ourjs

  原文

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1557
0 评论
549

发表评论

!