我正在用Unity制作一款手机在线游戏。就像其他在线游戏一样,有一个登录屏幕,用于输入TextMesh Pro的TMP_InputField的ID/密码。密码输入字段用星号覆盖,但是输入字段的值仍然包含密码字符串,如果黑客或恶意软件获取了这些数据怎么办?输入字段是否足够安全?还是我需要通过其他方式加强安全?
感谢你可以模拟WPF应用程序,其中PasswordBox
被放置在GUI中,SecureString
作为数据结构。SecureString
并不完美但是,只是缩短了时间解密字符串可以在内存中(而不是一个常规string
受到不可预测的GC事件)。
显然你不能使用WPF控件,但你可以很容易地使用任何你喜欢的Unity UI框架创建自己的控件。
请注意,在。net 5+中(尽管从Unity的角度来看技术上不适用)SecureString
有一个不推荐的警告,其细节在这里介绍。然而,关于在任何应用中处理凭证是否是个好主意的争论仍然适用于Unity。
选择
一般来说,最好的安全性是当应用程序不处理用户名和密码1。
。
- Windows认证(虽然有点毫无意义的游戏)
- 证书(在游戏中闻所未闻)
- 依赖于已建立的SSO提供程序。例如xusMicrosoft Game Development Kit for Unity
在Unity中登录GDK(示例由GDK提供):
// Look ma, no need for passwords!
XUserAddOptions options = XUserAddOptions.AddDefaultUserAllowingUI;
SDK.XUserAddAsync(options, AddUserComplete);
private void AddUserComplete(int hresult, XUserHandle userHandle)
{
if (!Succeeded(hresult, "Sign in."))
{
return;
}
_userHandle = userHandle;
CompletePostSignInInitialization();
}
1DE0001: SecureString不应该使用
参见
- "整合微软游戏开发工具包与您的PC Unity游戏">, GDK,微软(完成与一个很好的Unity教程)
- "实现玩家登录">, GDK,微软