diff --git a/ctests/acceptance/EntryCept.php b/ctests/acceptance/EntryCept.php
index 880727212a..a6fc561bd9 100644
--- a/ctests/acceptance/EntryCept.php
+++ b/ctests/acceptance/EntryCept.php
@@ -5,6 +5,7 @@
$I->resetEmails();
$new_email = microtime(true).'.'.$faker->safeEmail;
+$password = $faker->password(8, 100).'1';
$I->wantTo('会員登録が正常にできるかを確認する');
$I->amOnPage('/entry/kiyaku.php');
@@ -29,8 +30,8 @@
'tel03' => '111',
'email' => $new_email,
'email02' => $new_email,
- 'password' => 'password',
- 'password02' => 'password',
+ 'password' => $password,
+ 'password02' => $password,
'sex' => (string) $faker->numberBetween(1, 2),
'reminder' => (string) $faker->numberBetween(1, 7),
'reminder_answer' => $faker->word,
diff --git a/data/Smarty/templates/admin/system/input.tpl b/data/Smarty/templates/admin/system/input.tpl
index 9df9e67fe9..e454dfa6ea 100644
--- a/data/Smarty/templates/admin/system/input.tpl
+++ b/data/Smarty/templates/admin/system/input.tpl
@@ -71,7 +71,7 @@ self.moveTo(20,20);self.focus();
※必須入力
- ※半角英数字~文字(記号可)
+ ※半角英数字~文字(記号可)
確認のために2度入力してください。
diff --git a/data/class/SC_CheckError.php b/data/class/SC_CheckError.php
index 40af90927c..40fb6d3e1a 100644
--- a/data/class/SC_CheckError.php
+++ b/data/class/SC_CheckError.php
@@ -862,6 +862,37 @@ public function GRAPH_CHECK($value)
}
}
+ /**
+ * パスワードに使用可能な文字列のチェック
+ *
+ * 半角英数字をそれぞれ1種類以上含む PASSWORD_MIN_LEN 文字以上 PASSWORD_MAX_LEN 文字以下の文字列ではない場合エラーとする
+ * PASSWORD_MIN_LEN が8未満の場合は E_USER_WARNING を出力する
+ *
+ * @param array $value $value[0] = 項目名 $value[1] = チェック対象のパスワード文字列
+ */
+ public function PASSWORD_CHAR_CHECK($value)
+ {
+ if (PASSWORD_MIN_LEN < 8) {
+ trigger_error('PASSWORD_MIN_LEN が8未満に設定されています。', E_USER_WARNING);
+ }
+ $disp_name = $value[0];
+ $keyname = $value[1];
+
+ if (isset($this->arrErr[$keyname])) {
+ return;
+ }
+
+ $this->createParam($value);
+
+ $input_var = $this->arrParam[$keyname];
+ // see https://qiita.com/mpyw/items/886218e7b418dfed254b
+ $pattern = '/\A(?=.*?[a-z])(?=.*?\d)[!-~]{'.PASSWORD_MIN_LEN.','.PASSWORD_MAX_LEN.'}+\z/i';
+ if (strlen($input_var) > 0 && !preg_match($pattern, $input_var)) {
+ $this->arrErr[$keyname] =
+ "※ {$disp_name}は英数字をそれぞれ1種類使用し、".PASSWORD_MIN_LEN."文字以上で入力してください。
";
+ }
+ }
+
/* 必須選択の判定 */
// 入力値で0が許されない場合エラーを返す
// value[0] = 項目名 value[1] = 判定対象
diff --git a/data/class/SC_FormParam.php b/data/class/SC_FormParam.php
index ecdd15c261..a4995b97fd 100644
--- a/data/class/SC_FormParam.php
+++ b/data/class/SC_FormParam.php
@@ -206,6 +206,7 @@ public function checkError($br = true)
case 'NUM_CHECK':
case 'EMAIL_CHECK':
case 'EMAIL_CHAR_CHECK':
+ case 'PASSWORD_CHAR_CHECK':
case 'ALNUM_CHECK':
case 'GRAPH_CHECK':
case 'KANA_CHECK':
diff --git a/data/class/helper/SC_Helper_Customer.php b/data/class/helper/SC_Helper_Customer.php
index bad44b11c3..cf3dd8c33e 100644
--- a/data/class/helper/SC_Helper_Customer.php
+++ b/data/class/helper/SC_Helper_Customer.php
@@ -430,7 +430,7 @@ public function sfCustomerCommonParam(&$objFormParam, $prefix = '')
*/
public function sfCustomerRegisterParam(&$objFormParam, $isAdmin = false, $is_mypage = false, $prefix = '')
{
- $objFormParam->addParam('パスワード', $prefix . 'password', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'GRAPH_CHECK'));
+ $objFormParam->addParam('パスワード', $prefix . 'password', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'PASSWORD_CHAR_CHECK'));
$objFormParam->addParam('パスワード確認用の質問の答え', $prefix . 'reminder_answer', STEXT_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('パスワード確認用の質問', $prefix . 'reminder', STEXT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('性別', $prefix . 'sex', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
@@ -443,7 +443,7 @@ public function sfCustomerRegisterParam(&$objFormParam, $isAdmin = false, $is_my
if (SC_Display_Ex::detectDevice() !== DEVICE_TYPE_MOBILE) {
$objFormParam->addParam('メールアドレス', $prefix . 'email', null, 'a', array('NO_SPTAB', 'EXIST_CHECK', 'EMAIL_CHECK', 'SPTAB_CHECK', 'EMAIL_CHAR_CHECK'));
- $objFormParam->addParam('パスワード(確認)', $prefix . 'password02', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'GRAPH_CHECK'), '', false);
+ $objFormParam->addParam('パスワード(確認)', $prefix . 'password02', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'PASSWORD_CHAR_CHECK'), '', false);
if (!$isAdmin) {
$objFormParam->addParam('メールアドレス(確認)', $prefix . 'email02', null, 'a', array('NO_SPTAB', 'EXIST_CHECK', 'EMAIL_CHECK', 'SPTAB_CHECK', 'EMAIL_CHAR_CHECK'), '', false);
}
diff --git a/data/class/pages/admin/LC_Page_Admin_Index.php b/data/class/pages/admin/LC_Page_Admin_Index.php
index f3d8dc9aeb..929c4d4c39 100644
--- a/data/class/pages/admin/LC_Page_Admin_Index.php
+++ b/data/class/pages/admin/LC_Page_Admin_Index.php
@@ -100,7 +100,7 @@ public function action()
public function lfInitParam(&$objFormParam)
{
$objFormParam->addParam('ID', 'login_id', ID_MAX_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK' ,'MAX_LENGTH_CHECK'));
- $objFormParam->addParam('PASSWORD', 'password', ID_MAX_LEN, '', array('EXIST_CHECK', 'GRAPH_CHECK', 'MAX_LENGTH_CHECK'));
+ $objFormParam->addParam('PASSWORD', 'password', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'GRAPH_CHECK', 'MAX_LENGTH_CHECK'));
}
/**
diff --git a/data/class/pages/admin/system/LC_Page_Admin_System_Input.php b/data/class/pages/admin/system/LC_Page_Admin_System_Input.php
index b5fbdbb5c7..f6be3eb890 100644
--- a/data/class/pages/admin/system/LC_Page_Admin_System_Input.php
+++ b/data/class/pages/admin/system/LC_Page_Admin_System_Input.php
@@ -189,8 +189,8 @@ public function initForm(&$objFormParam, &$arrParams, $mode = '')
$objFormParam->addParam('パスワード', 'password', '', '', array('EXIST_CHECK'));
$objFormParam->addParam('パスワード(確認)', 'password02', '', '', array('EXIST_CHECK'));
} else {
- $objFormParam->addParam('パスワード', 'password', '', '', array('EXIST_CHECK', 'GRAPH_CHECK'));
- $objFormParam->addParam('パスワード(確認)', 'password02', '', '', array('EXIST_CHECK', 'GRAPH_CHECK'));
+ $objFormParam->addParam('パスワード', 'password', '', '', array('EXIST_CHECK', 'PASSWORD_CHAR_CHECK'));
+ $objFormParam->addParam('パスワード(確認)', 'password02', '', '', array('EXIST_CHECK', 'PASSWORD_CHAR_CHECK'));
}
$objFormParam->addParam('権限', 'authority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('稼働/非稼働', 'work', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
@@ -216,10 +216,10 @@ public function validateData(&$objFormParam, &$arrParams, $mode)
// ログインID・パスワードの文字数チェック
$objErr = new SC_CheckError_Ex();
if ($mode == 'new') {
- $objErr->doFunc(array('パスワード', 'password', ID_MIN_LEN, ID_MAX_LEN), array('NUM_RANGE_CHECK'));
+ $objErr->doFunc(array('パスワード', 'password', PASSWORD_MIN_LEN, PASSWORD_MAX_LEN), array('NUM_RANGE_CHECK'));
$objErr->doFunc(array('ログインID', 'login_id', ID_MIN_LEN, ID_MAX_LEN), array('NUM_RANGE_CHECK'));
} elseif ($mode == 'edit') {
- $objErr->doFunc(array('パスワード', 'password', ID_MIN_LEN, ID_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
+ $objErr->doFunc(array('パスワード', 'password', PASSWORD_MIN_LEN, PASSWORD_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
$objErr->doFunc(array('ログインID', 'login_id', ID_MIN_LEN, ID_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
}
$objErr->doFunc(array('パスワード', 'パスワード(確認)', 'password', 'password02'), array('EQUAL_CHECK'));
diff --git a/data/mtb_constants_init.php b/data/mtb_constants_init.php
index e0179a7b78..13066f1387 100644
--- a/data/mtb_constants_init.php
+++ b/data/mtb_constants_init.php
@@ -255,9 +255,9 @@
/** 電話番号総数 */
define('TEL_LEN', 12);
/** フロント画面用:パスワードの最小文字数 */
-define('PASSWORD_MIN_LEN', 4);
+define('PASSWORD_MIN_LEN', 8);
/** フロント画面用:パスワードの最大文字数 */
-define('PASSWORD_MAX_LEN', STEXT_LEN);
+define('PASSWORD_MAX_LEN', SMTEXT_LEN);
/** 検査数値用桁数(INT) */
define('INT_LEN', 9);
/** クレジットカードの文字数 (*モジュールで使用) */
diff --git a/html/install/index.php b/html/install/index.php
index c6614c1970..dddceab457 100644
--- a/html/install/index.php
+++ b/html/install/index.php
@@ -701,8 +701,8 @@ function lfInitWebParam($objWebParam)
$objWebParam->addParam('店名', 'shop_name', MTEXT_LEN, '', array('EXIST_CHECK', 'MAX_LENGTH_CHECK'), $shop_name);
$objWebParam->addParam('管理者:メールアドレス', 'admin_mail', null, '', array('EXIST_CHECK', 'EMAIL_CHECK', 'EMAIL_CHAR_CHECK'), $admin_mail);
- $objWebParam->addParam('管理者:ログインID', 'login_id', ID_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'ALNUM_CHECK'));
- $objWebParam->addParam('管理者:パスワード', 'login_pass', ID_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'ALNUM_CHECK'));
+ $objWebParam->addParam('管理者:ログインID', 'login_id', ID_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'GRAPH_CHECK'));
+ $objWebParam->addParam('管理者:パスワード', 'login_pass', PASSWORD_MAX_LEN, '', array('EXIST_CHECK', 'SPTAB_CHECK', 'PASSWORD_CHAR_CHECK'));
$objWebParam->addParam('管理機能:ディレクトリ', 'admin_dir', ID_MAX_LEN, 'a', array('EXIST_CHECK', 'SPTAB_CHECK', 'ALNUM_CHECK'), $oldAdminDir);
$objWebParam->addParam('管理機能:SSL制限', 'admin_force_ssl', 1, 'n', array('SPTAB_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'), $admin_force_ssl);
$objWebParam->addParam('管理機能:IP制限', 'admin_allow_hosts', LTEXT_LEN, 'an', array('IP_CHECK', 'MAX_LENGTH_CHECK'), $admin_allow_hosts);
@@ -782,7 +782,7 @@ function lfCheckWebError($objWebParam)
$objErr->doFunc(array('管理者:ログインID', 'login_id', ID_MIN_LEN, ID_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
// パスワードのチェック
- $objErr->doFunc(array('管理者:パスワード', 'login_pass', ID_MIN_LEN, ID_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
+ $objErr->doFunc(array('管理者:パスワード', 'login_pass', PASSWORD_MIN_LEN, PASSWORD_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
// 管理機能ディレクトリのチェック
$objErr->doFunc(array('管理機能:ディレクトリ', 'admin_dir', ID_MIN_LEN, ID_MAX_LEN), array('SPTAB_CHECK', 'NUM_RANGE_CHECK'));
diff --git a/html/install/sql/insert_data.sql b/html/install/sql/insert_data.sql
index 69f207e197..9887f1506c 100644
--- a/html/install/sql/insert_data.sql
+++ b/html/install/sql/insert_data.sql
@@ -1170,8 +1170,8 @@ INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ZIP01_LEN', '3', 20
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('ZIP02_LEN', '4', 201, '郵便番号2');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('TEL_ITEM_LEN', '6', 202, '電話番号各項目制限');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('TEL_LEN', '12', 203, '電話番号総数');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PASSWORD_MIN_LEN', '4', 204, 'フロント画面用:パスワードの最小文字数');
-INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PASSWORD_MAX_LEN', 'STEXT_LEN', 205, 'フロント画面用:パスワードの最大文字数');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PASSWORD_MIN_LEN', '8', 204, 'フロント画面用:パスワードの最小文字数');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PASSWORD_MAX_LEN', 'SMTEXT_LEN', 205, 'フロント画面用:パスワードの最大文字数');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('INT_LEN', '9', 206, '検査数値用桁数(INT)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('CREDIT_NO_LEN', '4', 207, 'クレジットカードの文字数 (*モジュールで使用)');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('SEARCH_CATEGORY_LEN', '18', 208, '検索カテゴリ最大表示文字数(byte)');
diff --git a/html/install/templates/step1.tpl b/html/install/templates/step1.tpl
index 190e10423c..3eac840123 100644
--- a/html/install/templates/step1.tpl
+++ b/html/install/templates/step1.tpl
@@ -75,7 +75,7 @@ $(function() {
- ログインID※ 半角英数字~文字 |
+ ログインID※ 半角英数字記号~文字 |
@@ -84,7 +84,7 @@ $(function() {
|
- パスワード※ 半角英数字~文字 |
+ パスワード※ 半角英数字記号~文字 |
diff --git a/tests/class/SC_CheckError/SC_CheckError_PASSWORD_CHAR_CHECKTest.php b/tests/class/SC_CheckError/SC_CheckError_PASSWORD_CHAR_CHECKTest.php
new file mode 100644
index 0000000000..95eb474ed1
--- /dev/null
+++ b/tests/class/SC_CheckError/SC_CheckError_PASSWORD_CHAR_CHECKTest.php
@@ -0,0 +1,94 @@
+target_func = 'PASSWORD_CHAR_CHECK';
+ $this->faker = Faker\Factory::create('ja_JP');
+ }
+
+ public function testPASSWORD_CHAR_CHECK()
+ {
+ $this->arrForm = [self::FORM_NAME => 'aaaa1111'];
+ $this->expected = '';
+
+ $this->scenario();
+ $this->verify();
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithSymbol()
+ {
+ $this->arrForm = [self::FORM_NAME => 'aaaa.1111'];
+ $this->expected = '';
+
+ $this->scenario();
+ $this->verify();
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithEmpty()
+ {
+ $this->arrForm = [self::FORM_NAME => ''];
+ $this->expected = '';
+
+ $this->scenario();
+ $this->verify();
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithNull()
+ {
+ $this->arrForm = [self::FORM_NAME => null];
+ $this->expected = '';
+
+ $this->scenario();
+ $this->verify();
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithFaker()
+ {
+ $this->arrForm = [
+ self::FORM_NAME => $this->faker->password(8, 100).'1'
+ ];
+ $this->expected = '';
+ $this->scenario();
+ $this->verify($this->arrForm[self::FORM_NAME].' はパスワードに使用できない文字列です');
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithAlphabetOnly()
+ {
+ $this->arrForm = [
+ self::FORM_NAME => 'password'
+ ];
+ $this->expected = '※ PASSWORD_CHAR_CHECKは英数字をそれぞれ1種類使用し、8文字以上で入力してください。 ';
+
+ $this->scenario();
+ $this->verify();
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithNumberOnly()
+ {
+ $this->arrForm = [
+ self::FORM_NAME => '12345678'
+ ];
+ $this->expected = '※ PASSWORD_CHAR_CHECKは英数字をそれぞれ1種類使用し、8文字以上で入力してください。 ';
+
+ $this->scenario();
+ $this->verify();
+ }
+
+ public function testPASSWORD_CHAR_CHECKWithMinute()
+ {
+ $this->arrForm = [
+ self::FORM_NAME => $this->faker->password(6, 7)
+ ];
+ $this->expected = '※ PASSWORD_CHAR_CHECKは英数字をそれぞれ1種類使用し、8文字以上で入力してください。 ';
+
+ $this->scenario();
+ $this->verify();
+ }
+}
+
diff --git a/tests/class/plugin/LoadClassFileChangeTest.php b/tests/class/plugin/LoadClassFileChangeTest.php
index 803d81bcbd..db88a77791 100644
--- a/tests/class/plugin/LoadClassFileChangeTest.php
+++ b/tests/class/plugin/LoadClassFileChangeTest.php
@@ -9,10 +9,6 @@ protected function setUp()
{
parent::setUp();
$this->createPlugin();
- if (PHP_VERSION_ID < 70200) {
- $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance();
- $objPlugin->load();
- }
}
protected function tearDown()
|