隐藏恶意用户的数据javascript函数

时间:2016-02-23 16:30:55

标签: javascript jquery html

假设我将客户端列入来自服务器端的html页面,并且可以通过代码中包含的按钮删除这些客户端。

@foreach ($clients as $client) 
    <td>{!! client.name !!}</td><td><button type"button" onclick="delete({!! client.id!!})">
@endforeach

我的问题是这样做是否安全?我应该隐藏这个功能吗?

如何隐藏它?我以为我可以编写一个引用列出的每个客户端的jquery,但为此我必须为每个客户端创建一个javascript函数。

@foreach ($clients as $client) 
    <td>{!! client.name !!}</td><td><button type"button" id="client{!! client.id !!}">
@endforeach

然后:

<script type="text/javascript">
@foreach ($clients as $client) 
    $('#client{!! $client.id !!}').click(function(){ doStuff({!! $client.id !!}); });
@endforeach
</script>

嗯,我认为这不是一个好的解决方案,因为它仍然在按钮中显示客户端ID,并且我创建了许多相同代码的实例。我的感觉说必须有另一种方式,也许是一个图书馆。有没有人有一点线索?

谢谢。

Obs。:我知道我必须在服务器端进行验证,但我认为这个问题仍然很重要。

3 个答案:

答案 0 :(得分:4)

隐藏这个功能不会有帮助。

如果您提供HTTP端点来删除用户,那么任何人都可以使用他们喜欢的任何输入来调用它。

即使您设法隐藏了JS,使用浏览器的开发人员工具来查看“网络”选项卡并查看请求的URL以及向其发送的数据也是微不足道的。

因此,隐藏代码的尝试将产生主要影响,使其更容易出错并且难以调试。

不要浪费你的时间。只需编写易于维护的代码即可。

您可以做的唯一保护是对发出请求的用户进行身份验证(用户名+密码,OAuth等),然后确保他们授权删除他们要求在删除之前删除的用户......你必须在服务器上执行此操作。

答案 1 :(得分:0)

简答:不,隐藏该功能并不安全。

您可以使用诸如minifying之类的方法,这些方法会将您的代码更改为非常难以阅读的内容,但有些工具可以撤消此操作。但是,正如您在问题中所说,服务器端验证是阻止某人发现您的功能并调用它的唯一真正方法。大多数客户端安全措施只是通过默默无闻的安全措施,虽然它会抵御任何普通/不知情的攻击者,但它远非100%。

而且,只需触摸:My question is is it safe to do that? Should I hide this function?

我已经提到过如何无法隐藏/阻止代码运行。但是在前端使用此代码是否安全?好吧,不,将任何代码放到野外都不是100%安全的。但只要您的服务器正确验证请求,并且您遵循最佳实践,您就可以尽可能接近100%的行业。

答案 2 :(得分:-4)

只需在AdoQuery.Filteredstyle="display:none;"标记中添加<button>即可。 这应该使它隐藏,这将使您的代码可重用。