보안 강화: 랜덤 문자열 생성 방식 개선 및 비밀번호 입력 필드에 autocomplete 속성 추가

This commit is contained in:
Rinjae
2026-02-27 14:59:27 +09:00
parent 34093f37a7
commit a755aec78f
5 changed files with 16 additions and 9 deletions
@@ -80,7 +80,7 @@
<div id="direct-input-area" class="toolbar-group" style="display:none;"> <div id="direct-input-area" class="toolbar-group" style="display:none;">
<input type="text" id="direct-jdbc-url" class="form-control form-control-sm" placeholder="JDBC URL" style="width:250px;"> <input type="text" id="direct-jdbc-url" class="form-control form-control-sm" placeholder="JDBC URL" style="width:250px;">
<input type="text" id="direct-username" class="form-control form-control-sm" placeholder="Username" style="width:100px;"> <input type="text" id="direct-username" class="form-control form-control-sm" placeholder="Username" style="width:100px;">
<input type="password" id="direct-password" class="form-control form-control-sm" placeholder="Password" style="width:100px;"> <input type="password" id="direct-password" class="form-control form-control-sm" placeholder="Password" autocomplete="off" style="width:100px;">
</div> </div>
<div class="toolbar-divider"></div> <div class="toolbar-divider"></div>
@@ -198,7 +198,7 @@
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p class="small text-muted">변경사항을 커밋하려면 비밀번호를 입력하세요.</p> <p class="small text-muted">변경사항을 커밋하려면 비밀번호를 입력하세요.</p>
<input type="password" id="commit-password" class="form-control" placeholder="비밀번호"> <input type="password" id="commit-password" class="form-control" placeholder="비밀번호" autocomplete="off">
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">취소</button> <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">취소</button>
+4 -4
View File
@@ -332,7 +332,7 @@
<input type="text" name="userId" class="form-control rounded-left" placeholder="Id" required> <input type="text" name="userId" class="form-control rounded-left" placeholder="Id" required>
</div> </div>
<div class="form-group d-flex"> <div class="form-group d-flex">
<input type="password" name="password" class="form-control rounded-left" placeholder="Password" required> <input type="password" name="password" class="form-control rounded-left" placeholder="Password" autocomplete="off" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<select name="serviceType" class="form-control rounded-left" placeholder="system" required> <select name="serviceType" class="form-control rounded-left" placeholder="system" required>
@@ -382,14 +382,14 @@
<input type="text" name="resetUserId" class="form-control rounded-left" placeholder="User Id" required> <input type="text" name="resetUserId" class="form-control rounded-left" placeholder="User Id" required>
</div> </div>
<div class="form-group d-flex"> <div class="form-group d-flex">
<input type="password" name="resetPassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderCurrentPassword") %>" required> <input type="password" name="resetPassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderCurrentPassword") %>" autocomplete="off" required>
</div> </div>
<p><%= localeMessage.getString("login.toChangePasswordMessage") %></p> <p><%= localeMessage.getString("login.toChangePasswordMessage") %></p>
<div class="form-group d-flex"> <div class="form-group d-flex">
<input type="password" name="changePassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderChangePassword") %>" required> <input type="password" name="changePassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderChangePassword") %>" autocomplete="off" required>
</div> </div>
<div class="form-group d-flex"> <div class="form-group d-flex">
<input type="password" name="confirmPassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderConfirmationPassword") %>" required> <input type="password" name="confirmPassword" class="form-control rounded-left" placeholder="<%= localeMessage.getString("login.placeholderConfirmationPassword") %>" autocomplete="off" required>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
@@ -431,8 +431,10 @@
function generateString(length) { function generateString(length) {
let result = ''; let result = '';
const charactersLength = characters.length; const charactersLength = characters.length;
const randomValues = new Uint32Array(length);
window.crypto.getRandomValues(randomValues);
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength)); result += characters.charAt(randomValues[i] % charactersLength);
} }
return result; return result;
} }
@@ -307,8 +307,10 @@
function generateString(length) { function generateString(length) {
let result = ''; let result = '';
const charactersLength = characters.length; const charactersLength = characters.length;
const randomValues = new Uint32Array(length);
window.crypto.getRandomValues(randomValues);
for (let i = 0; i < length; i++) { for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength)); result += characters.charAt(randomValues[i] % charactersLength);
} }
return result; return result;
} }
@@ -1,14 +1,17 @@
package com.eactive.eai.rms.onl.apim.approval; package com.eactive.eai.rms.onl.apim.approval;
import java.security.SecureRandom;
public class RandomStringGenerator { public class RandomStringGenerator {
private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
private static final SecureRandom SECURE_RANDOM = new SecureRandom();
public static String generateString(int length) { public static String generateString(int length) {
StringBuilder result = new StringBuilder(length); StringBuilder result = new StringBuilder(length);
int charactersLength = CHARACTERS.length(); int charactersLength = CHARACTERS.length();
for (int i = 0; i < length; i++) { for (int i = 0; i < length; i++) {
int randomIndex = (int) (Math.random() * charactersLength); int randomIndex = SECURE_RANDOM.nextInt(charactersLength);
result.append(CHARACTERS.charAt(randomIndex)); result.append(CHARACTERS.charAt(randomIndex));
} }