gpt4 book ai didi

mysql - 表内的 SQL 存储

转载 作者:行者123 更新时间:2023-11-29 00:13:14 25 4
gpt4 key购买 nike

我需要在我的一个 mySQL 表中存储一系列 SQL 语句,以便稍后“回放”。我对所有用户输入进行清理、加密和 base64 编码。为播放而录制的一个相当典型的语句会读一些类似

的内容
 INSERT INTO `skins` (sid,skid,skin) VALUES('nepi1sl3A','cici9vx4A','c') ON DUPLICATE KEY UPDATE skin = 'c';

我将其传递给过滤器,将其更改为

INSERT INTO `skins` (sid,skid,skin) VALUES(~nepi1sl3A~,~cici9vx4A~,~c~) ON DUPLICATE KEY UPDATE skin = ~c~;

这使得回放更容易,因为在那个阶段我所要做的就是 str_replace ~。

鉴于加密 + base64 编码,~ 字符永远不会出现在任何 VALUES 中。

问题 - 我是否在此处存储任何不可预见的问题。如果是这样,是否有更安全/更好的方法来完成同样的事情?

在阅读了一些评论 * 答案后,我觉得需要进行更多澄清

最初我是加密 + base64 编码存储用于回放的实际语句。然而,经过反射(reflection),我觉得在播放之前需要进行 base64 解码 + 解密会造成不必要的开销,因为原始语句(所有用户数据都经过清理、加密和 base64 编码)无论如何都不是高风险。如果我想在存储之前替换引号,那是为了在不太可能的情况下提供最后一层安全性,因为有一天我忘记对用户数据执行清理/加密/base64 编码步骤。

最佳答案

我没有发现您正在做的任何致命问题。就数据库而言,这只是不透明数据——它表示 SQL 查询这一事实是无关紧要的。如果有任何危险,它将基于 SQL 查询的来源(例如用户输入);将它们保存在表中不会增加或减少危险。

正如我在评论中提到的,您不需要替换语句中的引号。如果您尝试将带有引号的语句替换为查询,引号只会导致问题。但是由于您在将语句代入查询之前对其进行了编码,因此引号将会消失。

理想情况下,您应该使用带有参数化查询的 API,而不是直接替换为 INSERT 语句。例如。如果你使用 PHP,你应该使用 PDO 或 MySQLi。

关于mysql - 表内的 SQL 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23925745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com