比如,有个视频网站,那么首先客户端要向服务端发送请求,服务端是怎么确认这是正常的请求而不是有人恶意发送的无意义请求,客户端怎么确认传过来的数据是服务端发送的正常数据不是有人恶意传来的垃圾数据呢


你这里说场景是客户端伺服器,指的是类似ios或安桌客户端通过http或https向服务端发起请求吧?

这种方式可以考虑通过验签来防止恶意请求的发起。如果介面前面有网关,验签可以在网关上实现,减轻业务服务端工作


题主的问题可能不太严谨。正常来说,一种是攻击,一种是脏数据。

脏数据是指不符合后端校验的数据,包括但不限以下几种:

  • 必填数据缺失
  • 类型错误
  • 参数类型不匹配
  • URL地址不匹配
  • 数据不合法

攻击是通常包括但不限以下几种:

  • DDOS攻击
  • 漏洞攻击(SQL注入等)

对于第一种,就是要做好数据校验,分别对应:

  • 必填项校验
  • 类型校验
  • 数据校验

对于第二种,就是要做好安全防范:

  • 限制访问频率或者是IP
  • SQL过滤等

再来看题主的问题,其实伺服器并不是保证客户端或者是其他端传来的数据一定是有效的,但是一定要保证对于无效或者是恶意的请求可以做出正确的响应

那么客户端是否存在同样的问题呢?

是的。

但主要是被劫持,也就是说,你以为你是在向正常的伺服器端请求数据,其实不是的。

运营商的DNS劫持,恶意植入广告来获取利润的事儿,很常见。

怎么解决?

Https。

可以多关注一下证书机制。


从安全形度来看,一般会根据数据的特征,与已存在的病毒库,漏洞库进行比对,区分异常与正常。

如果你发的数据是正常的但无意义的数据,那就确认不了。


人和人,不,机器和机器之间基本的信任呢?

如果发散思维,这题没解了,还是聚焦几个具体场景比较好。

伺服器端,对请求要有基本验证,这个估计你也清楚。验证逻辑完善很重要,除此以外,就应该是反爬虫,这个就说来话长了,略过。再一个,应该是防流量攻击,比如ddos攻击,这个你也可以看看相关文章。

而客户端,你要是不信任伺服器端,那么这个客户端也不要用了,是吧?怎么信任伺服器端?比如用https,再加上内容的hash校验来防篡改,基本也够了

也许你到互联网公司做开发,自然知道该怎么去做,我这种做企业内部开发的,也只能凭想像来强答,羞愧


首先,客户端如何确保服务端是真正的服务端,而不会被欺骗:

一个正常的伺服器是不会发送垃圾给你的。我觉得题主的意思是怎么防止伪伺服器冒充正牌伺服器发送垃圾消息给你。

这可以用很多方法来搞定。伺服器的ip一般是固定的,客户端通过ip找到伺服器,建立通道进行通信。因为同一个地址不可能对应两个伺服器,所以假冒伺服器不可能顶在正牌伺服器前面冒充,和客户端建立通道。

接下来就是有没有可能假伺服器打破这个通道,硬塞一些垃圾进去。这个点对点通信是直接由运营商的网路硬体实现的,不公开的,依然无法被外部破解。

但是,就算如此,黑客也可以利用一些漏洞往你客户端塞垃圾消息的。比如用病毒感染你的机器,将你访问的域名解析到他的伺服器上,或者直接篡改你的客户端等等。而且如果你的电脑是无线上网,那所有的通信都是暴露在空气中的。黑客顶著个大天线,背个大书包,就可以为所欲为了。

接下来是伺服器如何防止客户端发垃圾数据。客户端搞事确实是经常发生的。黑客就喜欢看见一个网站,随便发点包过去试试能不能注入点东西。

这里,垃圾数据又分为很多种。

首先是无意义的位元组流。客户端伺服器之间通信传输的都是byte数组。所以你要传输数据,需要有一个编码方式,能让数据和byte数组之间相互转换。一个聪明的程序员会确保程序会判断输入的byte流是否有效,如果无效会弃之不用并报错,而不是在解析过程中懵逼死机。

还有一种可能是发欺骗数据。比如一个用户还没登录,是不可能修改密码的。但是可以通过发包的方式,直接向伺服器发送修改密码的请求。还比如黑客利用数据包解析过程的漏洞,把代码塞进数据包里,在伺服器解析数据包的过程中代码就会不知不觉地被执行。

解决这种问题,也是后端程序员的主要任务。后端程序员需要从数据包的设计来尽可能杜绝注入漏洞,同时在每次接受数据包的时候也要加上各种防守代码,来确保这是个真实有效的合法公民而不是一个一个满脸淫笑的黑客大佬。

而显然,这是个世纪性难题,道高一尺魔高一丈,虽然漏洞一个个被修复,但黑客总能发现漏洞并往伺服器里塞一些其奇奇怪怪的东西。


根据我个人浅薄的理解(指web端)

伪造服务端向客户端传输垃圾数据的,是不大可能的,毕竟客户端都是向指定伺服器IP发起请求,而IP是具有唯一性的,顶多就是中间抓包,破解数据包,只能拿到请求数据而已

最有机会下手的当然还是客户端

臭名昭著的XSS和CSRF攻击,黑客找到各种机会和漏洞,向你的服务端提交恶意代码或者欺骗用户,伪造恶意请求,服务端要是没处理好,就会被破解获取想要的信息,从而造成损失


刚好看到这篇文章

API 介面应该如何设计?如何保证安全?如何签名?如何防重??

mp.weixin.qq.com图标

你是问服务端怎么判断数据是生成器生产的垃圾数据

还是客户端怎么判断服务端给的数据是否有质量问题

如果是前者,本人不专业,回答不了你。

如果是后者,我觉得你没必要顾虑这种问题。咱们开发项目不是搞宫斗的,不会乱给你塞垃圾,如果真存在,你这问题应该问你的上司

如何你单纯想校验api给出是否符合问题,那么应该有很多api的相关工具可以使用的


推荐阅读:
相关文章