security - ABAP 安全存储:如何存储密码?
问题描述
我从来不需要在 ABAP 系统中存储密码。现在是时候学习一些新东西了...
我需要存储一个密码,我在 ABAP 系统上使用它来连接到不同的系统,所以我不能存储(单向)哈希。
我遇到了一些功能模块,例如FIEB_PASSWORD_ENCRYPT
(使用硬编码的密钥)或一些存储密码的 base64 编码版本的建议(天哪!)=> 两者都只会阻止任何人“快速读取”密码,如果它在屏幕,不阻止任何人窃取它。
我还遇到了SECSTORE
(SAP Help Link),它显然只能被 SAP 组件使用,不能被自定义应用程序使用。
基本上,我的需要是
以加密形式将密码存储在某些数据库表中
不可能(至少很难)通过对该表的简单选择来获得 pw
以清晰的形式从数据库表中获取,以便能够将其传递给“其他系统”
我不想重新发明轮子,尤其是在安全领域。
我认为,那里必须有可以用于此目的的东西……
更新为什么我需要它:
- 我正在访问 HTTPS 系统(目标类型 G),并且所有连接参数都在目标中配置。
- 不幸的是,需要在正文中作为表单参数传输 PW
免责声明:我目前正在讨论这是否可以变成基本身份验证,这既不安全也不安全(标题与正文)。但是使用基本身份验证,我可以使用目标配置,而后者又使用 SECSTORE。这个讨论是一个很长的故事,因为涉及到多方并且对系统的访问是多层次的......
解决方案
您可以使用 SSF_KRN_ENVELOPE 函数进行加密,使用 SSF_KRN_DEVELOPE 进行解密。它使用 RSA 标准,因此结果可能很大。我更喜欢在https://github.com/Sumu-Ning/AES使用 ABAP AES 类
这些功能使用系统证书,AES 库需要 IV 和密钥,因此如果用户有调试或开发人员授权,他可以获得它。
正确的方式是使用标准的沟通方式。例如使用带有基本身份验证的 SOAP 客户端并将密码保存在 SOA 管理器中。在 SM59 配置中也可以使用 http 和 https 协议进行基本身份验证。
推荐阅读
- python - 在 Django Factory Boy 中,是否可以静音特定的接收器(不是所有信号)?
- ios - 如何“松散地”触发功能?
- python - Gunicorn 工作人员在请求后不会缩小内存
- dependency-injection - 在 dotnet core 中使用 DI 为多个实例创建多个范围
- python - pandas groupby 中“as_index = False”和“reset_index()”之间的区别
- java - 复合图形白到异或
- r - 将数据框中列中括号之间的文本提取到数据框中的新列中
- python - 如何将 pip 包安装到特定的 Python 版本?
- java - Java 登录到亚里士多德元数据注册表
- java - Niolocker 在 Spring Boot 应用程序中不起作用