草庐IT

php - 在 MySQL DB 中存储 'sensitive' 数据

coder 2023-10-08 原文

“敏感”数据应如何存储在 MySQL 数据库中?

1)我是否应该更加关注MySQL数据库的安全性并将数据存储为纯文本?

2) 我应该加密数据吗?

  • 如果是,那么应该如何加密?
    1. 使用 MySQL aes_encrypt/aes_decrypt?
    2. 使用 PHP AES 函数/算法加密/解密数据?
  • 数据应该如何存储在MySQL中?
    1. BLOB
    2. 二进制
    3. 可变二进制数

在我的例子中,“敏感”数据是由个人完成的付款。

谢谢

最佳答案

两者兼而有之。两个现有答案(在我写这篇文章时 https://stackoverflow.com/a/10718397/1015483https://stackoverflow.com/a/10718459/1015483 )是有效的 - 您需要查看我能想到的大约 5 种可能的攻击方法

  • 他们可以访问您的数据库服务器;所以是的,尽可能多地保护 child (马特的回答)
  • 独立数据劫持(有人以其他方式获取您的数据库数据,可能是备份,可能是他们猜测密码,如果您将数据从一个地方传输到另一个地方,则可能是 MITM)。为此,您需要加密您的数据。您也可以出于某种原因进行 CSV 转储并通过电子邮件发送给某人。哎呀。但它发生了。所以加密(vlzvt的回答)

但没有提到的三个要素:

  • 他们可以访问您的网络服务器(如果不同于您的数据库服务器)。如果他们可以访问网络服务器,那么所有赌注都会被取消,因为他们有您的密码,很多加密 key 。所以你需要让它比数据库服务器更安全。 (马特可能是上面的意思 - 但只是说清楚)
  • 与上述类似但不要忘记的是,如果有人可以访问 phpMyAdmin 或您的管理控制台。不要使用纯文本身份验证或配置存储的密​​码进行访问。
  • 最后是您的应用程序本身(也是最难锁定的)。您需要防止可能泄露数据的 SQL 注入(inject)。如果有人确实通过未捕获的查询获得访问权限,则加密数据将停止最大限度地减少问题 - 因此为此,加密是解决方案。

对于您问题的第 2 部分:

使用 MySQL 加密/解密功能将阻止有权访问原始数据的人,但不会阻止 MITM 或 SQL 注入(inject)甚至 CSV 转储进行传输。

因此,IMO(这只是我的意见和我完成它的方式)是用 PHP 加密并通过网络发送加密数据,因为这会停止所有捕获数据的方法,并且 CSV 转储将被“炒”。

如果这样做,您也可以使用 varbinary/blob 类型,因为它会阻止您意外地尝试在 phpMyAdmin 中读取/编辑。另外名义上可能会节省几个字节(尽管这取决于索引和其他内容 - 因此仅此一项并不是一个成功的论点)。


现在是缺点:搜索和排序。你索引或搜索的任何内容,如果加密,将只匹配完整的、精确的、区分大小写的字符串,并填充到正确的长度(通常搜索不区分大小写,你可以使用 LIKE 进行部分搜索)。如果你想 ORDER BY 那么你需要原始字符串。所以在设计结构时要牢记这一点。

希望对您有所帮助。

关于php - 在 MySQL DB 中存储 'sensitive' 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10718274/

有关php - 在 MySQL DB 中存储 'sensitive' 数据的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  6. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  9. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  10. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

随机推荐