假设我将客户端列入来自服务器端的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。:我知道我必须在服务器端进行验证,但我认为这个问题仍然很重要。
答案 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.Filtered
或style="display:none;"
标记中添加<button>
即可。
这应该使它隐藏,这将使您的代码可重用。