数据属性和脚本注入

时间:2016-02-24 23:56:32

标签: html ruby-on-rails coffeescript xss javascript-injection

对于我的rails应用程序,我使用数据属性相当广泛,因为它很容易,并且该网站从未被期望完成或发布,只是我为了个人乐趣而做的事情。原始HTML的一个简短例子是

<span class="player-name" data-id="4" >Example Player</span>

然后我可以通过以下方式访问coffeescript中的'id':

id = $('.player-name').data('id')

我想知道这种数据属性的使用是否会通过编辑开发人员控制台中数据属性的人员使网站容易受到攻击。此外,如果有更好的方法来访问jQuery中的数据,如果有人能指出我正确的方向,我将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

是的,你是对的。人们可以修改这个。但这对于data-属性来说并不是唯一的;人们可以修改任何并使用任何参数向服务器发送任何请求。

您应始终验证来自客户端的数据。永远,永远,永远。我经常在应用程序中看到http://example.com/orders/42这样的网址,其中将42修改为666会导致我查看陌生人的订单。哎呀!对于AJAX请求,伪造数据需要花费更多精力,但并不多。人们可以(并且将会!)修改客户端上的任何内容:URL,HTML,JavaScript,CSS等,因此始终错误依赖于安全性。

实际上,这意味着在从Rails应用程序中的数据库中获取对象后,您应该始终检查当前登录的用户是否可以查看此对象。例如,在控制器中,您可以执行以下操作:

def show
    # Fetch it from the DB
    some_object = SomeObject.find params[:id]

    # Make sure the current user is authorized!
    raise if some_object.player_id != logged_in_player.id

    # ..your controller code..
end

我不一定建议你这样做&#34;手动&#34;就像上面的例子一样。对于Ruby on Rails,有两个众所周知的宝石可以帮助解决这个问题:

  • Pundit;这就是我的建议。它简单,优雅,灵活。
  • CanCan;也用了很多。它比Pundit更复杂,我发现它实际上并没有提供更多的功能。不过,您的里程可能会有所不同。