我有一个处理纯数值数据并给出一些响应的软件。
为了安全起见,我把它放在两个数据二极管后面:一个用于输入数据,一个用于输出响应。数据二极管作为客户专用硬件实现.
要点:数据二极管宽4位,因此只允许4位字.数据是纯数字的,并以二进制形式编码如下:
0000 = '0'
0001 = '1'
0010 = '2'
0011 = '3'
0100 = '4'
0101 = '5'
0110 = '6'
0111 = '7'
1000 = '8'
1001 = '9'
1010 = '.'
1011 = ';' (separator)我的数据二极管背后的软件还能免受黑客攻击吗?
我相信是的,因为4位数据字不允许黑客发送任何恶意命令.如果他们是8位宽,那么所有的ASCII字符将通过和软件将是脆弱的。

发布于 2018-01-18 12:32:06
数据二极管有几个用例,还不清楚用例到底是什么,以及数据二极管是否是解决未知问题的方法。但我的猜测是,数据二极管并不是你真正需要的,而且你目前关于如何使用数据二极管的想法并不能提供你想象中的安全性:
您的用例不是这些。相反,您似乎希望将来自外部的一些数据输入到某个服务中,并得到一个响应,但仍然要保护该服务不受外部黑客攻击。这种双向通信不是单向数据二极管的用例。通过简单地组合两个数据二极管,您基本上允许(大部分是不受限制的)双向通信,因此不保护服务。
您可能需要的是一个应用程序协议级网关,即允许受限的双向通信的系统。如果适当地执行通信协议的语法和语义,则该网关可以确保服务只获得它能够安全处理的数据,并且只有数据离开符合协议定义的语法和语义的服务--这严重限制了攻击者如何危害服务以及如何利用成功的妥协。
发布于 2018-01-18 10:30:14
它仍然处于危险之中。你好像误解了攻击是怎么发生的。
例如,假设你有以下情况-
int arr[4];
int idx = ReadNumberFromInput();
int val = ReadNumberFromInput();
arr[idx] = val;没有检查idx以确保它在0-3之间。您正在用val覆盖任意一段内存。idx可能是用来指向用户以后可以调用的指令的。
https://security.stackexchange.com/questions/177893
复制相似问题