java开发安全之:Password Management: Hardcoded Password

这篇具有很好参考价值的文章主要介绍了java开发安全之:Password Management: Hardcoded Password。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Overview

Hardcoded password 可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。

Details

使用硬编码方式处理密码绝非好方法。这不仅是因为所有项目开发人员都可以使用通过硬编码方式处理的密码,而且还会使解决这一问题变得极其困难。在代码投入使用之后,除非对软件进行修补,否则将无法更改密码。如果受密码保护的帐户遭受入侵,系统所有者将必须在安全性和可用性之间做出选择。 在这种情况下, getConnection() 的调用中发现 Hardcoded Password。

例 1:以下代码用 hardcoded password 来连接数据库:

DriverManager.getConnection(url, "scott", "tiger");

该代码可以正常运行,但是有权访问该代码的任何人都能得到这个密码。一旦程序发布,除非修补该程序,否则可能无法更改数据库用户“scott”和密码“tiger”。雇员可以利用手中掌握的信息访问权限入侵系统。

更糟的是,如果攻击者能够访问应用程序的字节代码,那么他们就可以利用 javap -c 命令访问已经过反汇编的代码,而这些代码中恰恰包含用户使用过的密码值。此操作的结果可能类似于

Example 1 的以下内容:

javap -c ConnMngr.class 22: ldc #36; //String 
jdbc:mysql://ixne.com/rxsql 24: ldc #38; //String scott 26: ldc #17; //String tiger

在移动环境中,由于设备丢失的几率较高,所以 password management 非常重要。

示例 2:以下代码会使用硬编码的用户名和密码设置用于通过 Android WebView 查看受保护页面的身份验证。 ...

webview.setWebViewClient(new WebViewClient() 
{ 
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
 handler.proceed("guest", "allow"); 
} 
}
); 

... 与Example 1 类似,该代码可以正常运行,但是有权访问此代码的任何人都可以获得此密码。

Recommendations

绝不能对密码进行硬编码。通常情况下,应对密码进行模糊处理,并在外部资源文件中进行管理。在系统中的任何位置采用明文的形式存储密码,会造成任何有足够权限的人均可读取和无意中误用密码。至少,要对密码进行散列处理后再存储。 一些第三方产品声称可以安全地管理密码。例如,WebSphere Application Server 4.x 用简单的异或加密算法加密数值,但是请不要对诸如此类的加密方式给予完全的信任。

WebSphere 以及其他一些应用服务器通常都只提供过期的且相对较弱的加密机制,这对于对安全性要求较高的环境来说是远远不够的。目前,最佳的安全且通用的解决方法是创建自己的专有机制。 对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个不错的备选方案。SQLCipher 是对 SQLite 数据库的扩展,为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。

示例 3:以下代码演示了如何在下载必要的二进制文件后将 SQLCipher 集成到 Android 应用程序中,并将凭据存储到数据库文件中。

import net.sqlcipher.database.SQLiteDatabase; 
 SQLiteDatabase.loadLibs(this); 
File dbFile = getDatabasePath("credentials.db"); 
dbFile.mkdirs(); 
dbFile.delete(); 
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, "credentials", null); db.execSQL("create table credentials(u, p)"); 
db.execSQL("insert into credentials(u, p) values(?, ?)", new Object[]{username, password}); 

... 请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。 要在 WebView 存储器上启用加密,必须使用 sqlcipher.so 库重新编译 WebKit。文章来源地址https://www.toymoban.com/news/detail-812411.html

到了这里,关于java开发安全之:Password Management: Hardcoded Password的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【开发环境】下载、安装 SQL Server Management Studio ( 下载 SSMS | 安装 SSMS | 连接远程数据库 )

    SQL Server Management Studio 简称 SSMS , 本文中为了方便使用 SSMS 简称 ; 进入到 什么是 SQL Server Management Studio (SSMS)? 介绍页面 : https://learn.microsoft.com/zh-cn/sql/ssms/sql-server-management-studio-ssms 在该页面中 , 对 SSMS 进行了简要的介绍 , 点击下图中的 下载 SQL Server Management Studio (SSMS) 选项 ,

    2024年02月05日
    浏览(84)
  • Linux Mii management/mdio子系统分析之三 mii_bus注册、注销及其驱动开发流程

    (转载)原文链接:https://blog.csdn.net/u014044624/article/details/123303174       本篇是mii management/mdio模块分析的第三篇文章,本章我们主要介绍mii-bus的注册与注销接口。在前面的介绍中也已经说过,我们可以将mii-bus理解为mdio总线的控制器的抽象,就像spi-master、i2c-adapter一样。 本

    2024年01月16日
    浏览(43)
  • 开发语言漫谈-Java

            由于C++过于复杂,Java诞生了。与C++相比,Java更易于学习和使用,它去掉C++中的指针和解决了内存管理问题。Java提供了垃圾自动回收机制,自动管理不再使用的内存。Python又进一步简化,使得语法更简洁,更易于阅读和编写。当然随着简化,性能就越来越低。    

    2024年04月10日
    浏览(49)
  • JAVA开发(从安全角度学习)

     web.xml(第二种配置路由的方式) 使用预编译写法可以有效防止sql注入。 Filter 被称为过滤器,过滤器实际上就是对 Web 资源进行拦截,做一些处理后再交给下一个过滤器或 Servlet 处理,通常都是用来拦截request进行处理的,也可以对返回的 response进行拦截处理。开发人员利用

    2024年03月18日
    浏览(41)
  • 阿里Java开发手册~安全规约

    1. 【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 说明: 防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信 内容、修改他人的订单。 2. 【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明: 查看个人

    2024年02月15日
    浏览(47)
  • Java安全 URLDNS链分析,网络安全开发面试基础

    this代表的是当前对象的指针,也可以用 this.name 的方式调用当前对象中的成员 那我们去 URLStreamHandler类 当中,查看下 hashCode方法 的代码 protected int hashCode(URL u) { int h = 0; // Generate the protocol part. String protocol = u.getProtocol(); if (protocol != null) h += protocol.hashCode(); // Generate the host pa

    2024年04月23日
    浏览(37)
  • 第七十七篇:车辆安全-车载软件C++语言开发指南(AUTOSAR C++)

    C++是面向对象的编程,比C语言更加复杂,抽象程度高,但C++在一些图像处理、系统、控件的编程方面,实用性更强,具有自己的编程优势。在车载嵌入式系统的开发中,C和C++都具有重要的作用。C++语言所使用的面向对象的编程技术如封装、继承和多态性极大的提高了在大规

    2024年02月04日
    浏览(84)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

    目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA   特性 4、PHP 作用 PHP 能做什么? 5、C/C++ 使用 如何学习 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML,JS那些基础知识,磨刀不误砍柴工。其次,了解基本的代码后,就可以去学习相关的漏洞知

    2024年02月09日
    浏览(52)
  • 瑞_Java开发手册_(四)安全规约

    🙊前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研究使用,禁止用于商业用途,违者

    2024年01月17日
    浏览(48)
  • 码出高效:Java开发手册笔记(线程安全)

        并发与并行的目标都是尽可能快地执行完所有任务。以医生坐诊为例,某个科室有两个专家同时出诊,这就是两个并行任务,其中一个医生,时而问诊,时而查看化验单,然后继续问诊,突然又中断去处理病人的咨询,这就是并发。在并发环境下,由于程序的封闭性全

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包