我正在使用事务来管理相当复杂的 Web 应用程序中多个 MySQL InnoDB 表的数据。简而言之,给定的交易的工作原理如下:
假设用户 A 执行了一些与积分相关的操作,执行步骤 1,执行线程将用户的积分总数读入内存,并且应用程序开始计算新的总数。同时,用户 B 执行的操作会影响用户 A 的总积分,并且另一笔交易开始;但是,第一个事务尚未完成,因此第二个线程获取与第一个事务相同的点总值作为起点(来自同一表行)。随后,事务 1 完成并创建一个新的用户总积分,并了解新值应该是什么,此后不久,事务 2 完成并为用户总积分创建一个新行。但是,第二笔交易的积分总数现在不正确,因为它无法说明交易 1 创建的新总分。
我的问题是:
感谢您的考虑!
我最近开发了一款在线多人游戏,它运行良好.有一个中央服务器处理与客户端的TCP连接,它们都接收和发送数据.
有没有办法在接收器读取之前验证发送的数据是否未被修改?
TCP连接是否以某种方式处理它?如果不是最好的方法(不要求代码)实现它?
到现在为止,我提出了这些想法:
我搜索了一个常用的解决方案但找不到多少.
加密应该是我的最后选择.
编辑
以实现此目的的简单方法:
我想根据OWASP Web Service Security应用Web服务安全性.因此我偶然发现了两点:
到目前为止,只有一个RESTful服务可以由客户端直接访问.对于每个请求,客户端需要由服务器进行身份验证.所有通信都通过TLS保护.我现在不确定,Message Integrity因为我不明白这句话:
使用公钥加密时,加密确实保证机密性,但由于接收方的公钥是公开的,因此无法保证完整性.出于同样的原因,加密不能确保发件人的身份.
是否还要求客户签署数据以确保消息完整性?TLS只是点对点,代理是什么?
关于Message Confidentiality,我理解如下.
我明白了吗?
我们正在开发一个通过蓝牙使用 SPP(串行端口配置文件)的应用程序,开发人员正在讨论使用某种类型的协议和数据包传输,还是仅在没有任何形式的 ACK、序列或大小信息的情况下流式传输数据。
蓝牙是否提供有保证的传输和数据完整性,以便我们不需要数据包协议设计的开销?
我们可以仅依靠蓝牙来确保数据传输吗?
MurmurHash3和 xxHash等非加密哈希几乎专为哈希表设计,但它们的功能似乎与CRC-32、Adler-32和Fletcher-32相当(甚至更有利)。非加密哈希通常比 CRC-32 更快,并产生更多类似于慢速加密哈希(MD5、SHA)的“随机”输出。尽管如此,我只看到 CRC-32 或 MD5 被推荐用于数据完整性/校验和目的。
在下表中,我测试了 32 位校验和/CRC/哈希函数,以确定它们检测数据中微小差异的能力:
每个单元格中的结果意味着:A) 发现的冲突次数,以及 B) 32 个输出位中的任何一个设置为 1 的最小和最大概率。要通过测试 B,最大值和最小值应尽可能接近 50 . 任何低于 45 或高于 55 的东西都表明存在偏见。
查看表格,MurmurHash3 和Jenkins lookup2与 CRC-32(实际上未通过一项测试)相比要好得多。它们也分布良好。DJB2 和 FNV1a 通过了碰撞测试,但分布不佳。Fletcher32 和 Adler32 在 NullBytes 和 8RandBytes 测试中挣扎。
那么我的问题是,与其他校验和相比,“非加密哈希”有多适合检测文件中的错误或差异?CRC-32/Adler-32/CRC-64 是否有任何理由可能胜过任何体面的 32 位/64 位哈希?
我已向现有数据库添加了一些新实体(表)。因此在数据库配置中配置了这些-
@Database(entities = {existingTable1.class, existingTable2.class, existingTable3.class, existingTable4.class,
newTable1.class, newTable2.class
}, version = 1, exportSchema = false)
Run Code Online (Sandbox Code Playgroud)
由于该应用程序处于开发阶段,我用来避免迁移。因此,我已从设备中卸载该应用程序并通过 Android Studio(运行)进行安装。但它给出了以下错误-
Room 无法验证数据完整性。您似乎已更改架构但忘记更新版本号。您可以通过增加版本号来简单地解决此问题。
在我的清单中,allowBackup 设置为 false,如下所示-
android:allowBackup="false"
Run Code Online (Sandbox Code Playgroud)
编辑
我有一件事要提。我在 asset 文件夹中有一个 sqlite 数据库文件。我只是在安装时将其复制到相应的应用程序数据库文件夹中。因此,当需要添加包含大量预填充数据的新表时,我只需更新 asset 文件夹中的 sqlite 数据库文件,然后调整相关实体并构建/运行项目。这样,它工作得很好,但这次却产生了这个问题。
AFAIK,OS X是BSD派生,没有实际的强制文件锁定.如果是这样,即使我正在编写文件,似乎也无法阻止从其他程序写入访问权限.
如何在这样的环境中保证文件的完整性?我的程序退出后我并不关心诚信,因为现在是用户的责任.但至少,我认为我的程序运行时需要某种保证.
其他程序如何保证文件内容的完整性而不强制锁定?尤其是数据库程序 如果有共同的技巧或推荐的做法,请告诉我.
更新
我正在为非工程用户寻找GUI应用程序的数据层.目前,我的计划有这种情况.
数据太大,无法适应RAM.甚至很难被临时复制.所以它不能以原子方式读/写,并且应该在程序运行时直接从磁盘使用.
一种长期运行的专业GUI内容编辑器应用程序,由非工程师使用.虽然用户不是工程师,但他们仍然可以使用Finder或其他程序同时访问该文件.因此,用户可以意外删除或写入当前使用的文件.问题是用户不了解实际发生的情况,并期望程序处理文件完整性,至少程序正在运行.
我认为在当前情况下保证文件完整性的唯一方法是,
因为OS X缺乏系统范围的强制锁定,所以现在我不知道该怎么做.但我仍然认为有一种方法可以存档这种文件完整性,这是我不知道的.我想知道其他人是如何处理的.
这个问题与我的编程错误无关.那是另一个问题.目前的问题是保护来自不遵守咨询文件锁定的其他程序的数据.而且,用户通常是root用户,并且程序与同一用户一起运行,因此琐碎的Unix文件权限没有用.
每个 git commit 都有一个哈希值,它“标记”其内容。它是否也签署了提交的来源,或者只是用于哈希计算的提交数据本身?
换句话说:是否不可能(除了散列冲突)伪造第二个存储库,其头部提交具有完全相同的散列和相同的内容,但树的其余部分不同?
在生产环境中,基于Javascript的分析脚本(Google Analytics,Facebook Pixel等)将以简单的Javascript注入大多数Web应用程序以及唯一ID /像素ID.
例如,airbnb使用Google Analytics.我可以打开我的开发控制台并运行
setInterval(function() {ga('send', 'pageview');}, 1000);
这将导致每1秒钟一次请求分析像素.那是我的机器每小时3600个请求.
现在,这可以轻松地以分布式方式完成,每秒产生数百万个请求,完全扭曲了pageview事件的Google Analytics数据.我知道收集到的大量数据会在一定程度上纠正这种偏差,但这可以通过提高请求数量来轻松补偿.
我的问题是:是否有任何保护措施可以防止竞争对手或恶意个人以这种方式破坏应用程序的数据完整性?GA或Facebook是否提供此类选项?
javascript analytics facebook google-analytics data-integrity
阅读 dm-crypt 和 LUKS 的文档,我了解到 LUKS 是一种允许 FDE 的格式规范,而 dm-crypt 是一个 dm 目标,允许对块设备的写入/读取进行加密/解密。
但是,我不确定这些现在到底提供什么(即职责是什么)。在作者(Milan Broz)制作的幻灯片中,提到LUKS2还可以提供完整性保护(从而使加密得到验证)。由此看来,并阅读了LUKS1规范,我认为这在 LUKS1 中是不可能的。然而,稍后在幻灯片中它讨论了 dm-crypt 如何允许经过身份验证的加密。这就是我困惑的地方;我们假设我们使用 LUKS2 吗?
我觉得我并没有真正掌握 LUKS 和 dm-crypt 的主要功能和职责。
谢谢!
data-integrity ×10
hash ×2
analytics ×1
android ×1
android-room ×1
bluetooth ×1
checksum ×1
crc ×1
database ×1
encryption ×1
facebook ×1
file ×1
git ×1
java ×1
javascript ×1
linux ×1
luks ×1
macos ×1
mysql ×1
protocols ×1
security ×1
sha ×1
sockets ×1
spp ×1
ssl ×1
transactions ×1
transmission ×1