用于检查密码 strlen 的函数在 php 中不起作用
function for checking strlen of a password doesn't work in php
我正在制作一个注册页面,一切正常并已发送到数据库,但您可以输入弱密码。我想确保 pwd 长度的最小长度为 8。我添加了这些代码行,但是当我测试它时它跳过了这段代码,你可以输入任何你想要的 pwd。有谁知道为什么跳过这一行以及这个问题的解决方案是什么?
function pwdTooShort($pwd) {
$result;
if (strlen($pwd) > 7) {
$result = true;
}
else{
$result = false;
}
return $result;
}
if (isset($_POST["submit"])) {
$pwd = $_POST["pwd"];
require_once 'functions.inc.php';
if(pwdTooShort($pwd) !== false) {
header("location: ../sign-in.php?error=passwordtooshort");
exit();
}
}
if (isset($_GET["error"])){
if($_GET["error"] == "passwordtooshort"){
echo "<p> password is too short </p>";
}
}
<form action="include/signup.inc.php" method = "post">
<input type="password" name = "pwd" />
</form>
你的逻辑有点问题。
如果密码超过 7 个字符(向后),您的 pwdTooShort()
现在将 return true
。您可以将该函数更改为:
function pwdTooShort($pwd)
{
// Return true if it is 7 characters or shorter
return mb_strlen($pwd) <= 7;
}
我还将 strlen()
更改为 mb_strlen()
以说明多字节字符,正如@vee 在评论中所建议的那样。
改进建议
if
-陈述在技术上是正确的,但“过于复杂”。
你可以改变
if (pwdTooShort($pwd) !== false)
要么
if (pwdTooShort($pwd) === true)
或者只是
if (pwdTooShort($pwd))
为了更容易阅读
根据你的函数名来检查密码是否太短,我认为如果太短则应该 return true
否则应该 false
。
这是代码。它只是翻转 true
和 false
.
/**
* Check if password is too short (less than 8 characters).
*
* @param string $pwd The raw password without hash.
* @return bool Return `true` if it is too short, return `false` if it is not.
*/
function pwdTooShort($pwd) {
$result;
if (mb_strlen($pwd) > 7) {
$result = false;
}
else{
$result = true;
}
return $result;
}
上面的代码,我把strlen()
改成了mb_strlen()
,让它支持多字节字符(unicode文本),并精确计算字符。
我建议您不要将字符限制为非 unicode。 OWASP.
推荐
Allow usage of all characters including unicode and whitespace. There should be no password composition rules limiting the type of characters permitted.
他们所说的空格是字符之间的意思。你仍然可以 trim($password)
.
代码的其余部分将适用于此。
我正在制作一个注册页面,一切正常并已发送到数据库,但您可以输入弱密码。我想确保 pwd 长度的最小长度为 8。我添加了这些代码行,但是当我测试它时它跳过了这段代码,你可以输入任何你想要的 pwd。有谁知道为什么跳过这一行以及这个问题的解决方案是什么?
function pwdTooShort($pwd) {
$result;
if (strlen($pwd) > 7) {
$result = true;
}
else{
$result = false;
}
return $result;
}
if (isset($_POST["submit"])) {
$pwd = $_POST["pwd"];
require_once 'functions.inc.php';
if(pwdTooShort($pwd) !== false) {
header("location: ../sign-in.php?error=passwordtooshort");
exit();
}
}
if (isset($_GET["error"])){
if($_GET["error"] == "passwordtooshort"){
echo "<p> password is too short </p>";
}
}
<form action="include/signup.inc.php" method = "post">
<input type="password" name = "pwd" />
</form>
你的逻辑有点问题。
如果密码超过 7 个字符(向后),您的 pwdTooShort()
现在将 return true
。您可以将该函数更改为:
function pwdTooShort($pwd)
{
// Return true if it is 7 characters or shorter
return mb_strlen($pwd) <= 7;
}
我还将 strlen()
更改为 mb_strlen()
以说明多字节字符,正如@vee 在评论中所建议的那样。
改进建议
if
-陈述在技术上是正确的,但“过于复杂”。
你可以改变
if (pwdTooShort($pwd) !== false)
要么
if (pwdTooShort($pwd) === true)
或者只是
if (pwdTooShort($pwd))
为了更容易阅读
根据你的函数名来检查密码是否太短,我认为如果太短则应该 return true
否则应该 false
。
这是代码。它只是翻转 true
和 false
.
/**
* Check if password is too short (less than 8 characters).
*
* @param string $pwd The raw password without hash.
* @return bool Return `true` if it is too short, return `false` if it is not.
*/
function pwdTooShort($pwd) {
$result;
if (mb_strlen($pwd) > 7) {
$result = false;
}
else{
$result = true;
}
return $result;
}
上面的代码,我把strlen()
改成了mb_strlen()
,让它支持多字节字符(unicode文本),并精确计算字符。
我建议您不要将字符限制为非 unicode。 OWASP.
Allow usage of all characters including unicode and whitespace. There should be no password composition rules limiting the type of characters permitted.
他们所说的空格是字符之间的意思。你仍然可以 trim($password)
.
代码的其余部分将适用于此。