为了使用一些AJAX调用,我们经常使用一些输入类型=“隐藏”。但这些价值观很容易改变。那么,它是否是一个内置的rails功能,而不是允许向AJAX发送日期,用户无法使用,或者用户无法更改?
在我目前的rails应用程序中,我使用过滤器来丢弃控制器上的所有恶意操作。我没有构建公共API,所以我真的不需要更强大的检查。
但是例如,我有一个显示一些数据的apotomo小部件,使用隐藏的一些输入。但是如果你改变它,你可以访问另一个数据集。就我而言,这不是一个真正的问题,因为所有这些用户都有权访问这些数据集。
但是以某种方式以安全的方式为ajax调用提供数据吗?或唯一的安全,是关于权利管理?
答案 0 :(得分:1)
来自用户的所有输入都是不安全的,因为您无法控制它!用户甚至不需要webbrowser,但可以使用其他程序(如curl
或wget
)来发送操纵数据。
正如您所述,使用白名单(不是黑名单,因为您无法确定所有不好,但一切都很好!)是一个很好的开始方式。
要确保hidden
字段未被更改,您可以使用某种校验和,该校验和是使用固定密钥在服务器端计算的。绝不能让这个秘密暴露给你的访客!
hash = md5(field_1 + field_2 + field_3 + my_secret)
当这四个隐藏字段(field_1..3,hash)到达您的表单时,您可以重新计算哈希并将其与params [:hash]进行比较,以确保field_1到field_3没有被更改。 / p>