보안 강화: 랜덤 문자열 생성 방식 개선 및 비밀번호 입력 필드에 autocomplete 속성 추가
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user