gpt4 book ai didi

ruby-on-rails - 没有数据库的注册或邀请电子邮件验证

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:52 24 4
gpt4 key购买 nike

我想让我的数据库中几乎没有陈旧的帐户,我正在考虑进行新的注册和邀请,将他们的数据作为加密或散列 url 放入欢迎电子邮件中。一旦访问 url 中的链接,信息就会作为帐户添加到数据库中。目前有什么东西可以做到这一点吗?关于以这种方式进行用户注册的任何引用、想法或警告?谢谢!

编辑:我做了一个工作示例,url 是 127 个字符。

http://localhost/confirm?_=hBRCGVqie5PetQhjiagq9F6kmi7luVxpcpEYMWaxrtSHIPA3rF0Hufy6EgiH%0A%2BL3t9dcgV9es9Zywkl4F1lcMyA%3D%3D%0A

显然,更多数据 = 更大的 url

def create
# Write k keys in params[:user] as v keys in to_encrypt, doing this saves LOTS of unnecessary chars
@to_encrypt = Hash.new
{:firstname => :fn,:lastname => :ln,:email => :el,:username => :un,:password => :pd}.each do |k,v|
@to_encrypt[v] = params[:user][k]
end

encrypted_params = CGI::escape(Base64.encode64(encrypt(compress(Marshal.dump(@to_encrypt)), "secret")))
end

private

def aes(m,t,k)
(aes = OpenSSL::Cipher::Cipher.new('aes-256-cbc').send(m)).key = Digest::SHA256.digest(k)
aes.update(t) << aes.final
end

def encrypt(text, key)
aes(:encrypt, text, key)
end

def decrypt(text, key)
aes(:decrypt, text, key)
end

# All attempts to compress returned a longer url (Bypassed by return)

def compress(string)
return string
z = Zlib::Deflate.new(Zlib::BEST_COMPRESSION)
o = z.deflate(string,Zlib::FINISH)
z.close
o
end

def decompress(string)
return string
z = Zlib::Inflate.new
o = z.inflate(string)
z.finish
z.close
o
end

最佳答案

想法:

  • 为“cookie”使用真正的非对称密码,以防止机器人创建帐户。用公钥加密“cookie”,用私钥解码验证。
    理由:如果仅使用 base64 或其他算法对 cookie 进行编码,则很容易对该方案进行逆向工程并自动创建帐户。由于垃圾邮件机器人,这是不可取的。此外,如果帐户受密码保护,则密码必须出现在 cookie 中。任何有权访问注册链接的人不仅可以激活帐户,还可以找出密码。

  • 通过链接激活后需要重新输入密码。
    理由:根据网站的用途,您可能希望改进对信息欺骗的保护。激活后重新输入密码可防止激活链接被盗/欺骗。

  • 验证激活链接时,请确保其创建的帐户尚未创建。

  • 如何防止两个用户同时创建同名帐户?
    可能的答案:使用电子邮件作为登录标识符,不需要唯一的帐户名。

  • 先验证电子邮件,然后继续创建帐户。
    理由:这将最大限度地减少您需要在 cookie 中发送的信息。

关于ruby-on-rails - 没有数据库的注册或邀请电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382788/

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