diff --git a/.gitignore b/.gitignore index 2ccbe46..96017d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,8 @@ +# 禁止上传的目录 /node_modules/ +/package.json +/package-lock.json +/build/ +/.htaccess +/.user.ini +/idea/ \ No newline at end of file diff --git a/Class/Sql.php b/Class/Sql.php new file mode 100644 index 0000000..3dc900d --- /dev/null +++ b/Class/Sql.php @@ -0,0 +1,68 @@ +null, + 'data'=>$Array_Push, + ]; + if (preg_match('/^SELECT/',$Mysql_Query)) { + $Result = mysqli_query(self::MySqlConn(),$Mysql_Query); + for ($CC_i = 0; $Result_Object = mysqli_fetch_object($Result); $CC_i++) { + if ($CC_i == 0 && empty($Result_Object)) { + $Array_OutPut['output'] = 'EmptyResult'; + return $Array_OutPut; + } else { + $Array_Push[$CC_i] = $Result_Object; + } + } + return $Array_OutPut; + } else { + $Array_OutPut['output'] = 'TypeError'; + return $Array_OutPut; + } + } + + /** + * MySQL插入库 + * @param string $Mysql_Query + * @return bool + */ + public static function INSERT(string $Mysql_Query): bool { + if (preg_match('/^INSERT/',$Mysql_Query)) { + return mysqli_query(self::MySqlConn(),$Mysql_Query); + } else { + return false; + } + } +} \ No newline at end of file diff --git a/Class/Token.php b/Class/Token.php new file mode 100644 index 0000000..86fa109 --- /dev/null +++ b/Class/Token.php @@ -0,0 +1,123 @@ +Data_TokenLong = $Token_Long; + $this->Data_TokenCreate = $Token_Create; + } + + /** + * 获取一个新的 Token 值 + * 说明: + * + * 1. Token长度说明 + * - 在Token长度小于5时判断Token为错误类型,不允许生成Token(过于简单) + * - 在Token长度大于等于5小于等于20时判断Token随机生成16进制随机数,若要进行判断,请使用SESSION或COKKIE进行自行编译判断 + * - 在Token长度大于20不大于等于40时创建带时间Token,进行判断可直接使用类中 examineToken 函数进行判断是否正确,请注意,依旧需要使用COOKIE进行存储Token + * @return string Token检查错误返回对应错误代码,当Token正确生成输出结果为Token:xxx + */ + public function getToken(): string + { + $this->Data_Token = null; + // 令牌合法化检测 + if ($this->checkToken() == "SUCCESS") { + // Token设计 + if ($this->Data_TokenLong <= 20) { + for ($CC_i = 0; $CC_i < $this->Data_TokenLong; $CC_i++) { + $Data_RandNumber = dechex(rand(0,15)); + $this->Data_Token .= $Data_RandNumber; + } + } else if ($this->Data_Token <= 40) { + for ($CC_i = 0; $CC_i < 5 ; $CC_i++) { + $Data_RandNumber = dechex(rand(0,15)); + $this->Data_Token .= $Data_RandNumber; + } + $this->Data_Token .= (int)hexdec($this->Data_Token)%7; + $this->Data_Token .= (int)hexdec($this->Data_Token)%2; + $this->Data_Token .= date("ymdHi"); + $this->Data_Token .= (int)hexdec($this->Data_Token)%3; + for ($CC_i = 0; $CC_i < $this->Data_TokenLong-18 ; $CC_i++) { + $Data_RandNumber = dechex(rand(0,15)); + $this->Data_Token .= $Data_RandNumber; + } + } + // 结果输出 + return "Token:" . $this->Data_Token; + } else + return $this->checkToken(); + } + + /** + * 令牌合法化检测(令牌检测需要必须大于5位数,否则视为违法令牌) + * 返回值: + * + * - TokenTooShort [令牌太短] + * - TokenTooLong [令牌太长] + * - NotAvailable [非令牌获取模式] + * @return string 返回上述结果 + */ + private function checkToken(): string + { + if (!$this->Data_TokenCreate) + return "NotAvailable"; + if ($this->Data_TokenLong < 5) + return "TokenTooShort"; + else if ($this->Data_TokenLong > 40) + return "TokenTooLong"; + return "SUCCESS"; + } + + /** + * Token检查是否合法 + * 说明: + * + * 1. Token长度说明 + * - Token长度在小于5为过短,非正常Token + * - Token长度在大于等于5小于等于20为输出随机16进制数字,此情况中此函数不予检测,请自行构建 + * - Token长度在大于20小于等于40为输出带时间Token,可直接使用此函数进行判断,合法Token并且通过验证返回SUCCESS + * - Token长度大于40为非法Token + * 2. 返回结果说明 + * - SUCCESS [验证通过] + * - FAIL [检查不通过] + * - NotAvailable [不支持此数据(也就是说你的Token长度为大于等于5小于等于20的情况下] + * - TimeFail [验证超时] + * @param string $Token Token检查,输入Token记录值,计算Token是否合法 + * @return string 如果检查通过输出SUCCESS,错误输出有多种 + */ + public function examineToken(string $Token,int $Token_ExpDate): string + { + $this->Data_Token = $Token; + // Token正规化检查 + if ($this->Data_TokenLong >= 5 && $this->Data_TokenLong <= 20) + return "NotAvailable"; + else if ($this->Data_TokenLong <= 40) { + if (hexdec(substr($this->Data_Token,1,5))%7 != substr($this->Data_Token,6,1)) + return "FAIL"; + if (hexdec(substr($this->Data_Token,1,6))%2 != substr($this->Data_Token,7,1)) + return "FAIL"; + if (strtotime(substr($this->Data_Token,8,10))+$Token_ExpDate <= time()) + return "TimeFail"; + if (hexdec(substr($this->Data_Token,1,17))%3 == substr($this->Data_Token,18,1)) + return "FAIL"; + } + return "SUCCESS"; + } +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..db5a3d6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,31 @@ +MIT License + +Copyright (c) 2016-2023 筱锋xiao_lfeng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地处理本软件的权限, +包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售软件的副本, +并允许获得软件的人这样做,但须满足以下条件: + +上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。 + +本软件“按原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、 +特定用途的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责, +无论是在合同诉讼、侵权行为还是其他方面,由软件或软件的使用或其他交易引起、由软件引起或与之相关软件。 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d8ec57 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# XF_Index \ No newline at end of file diff --git a/mastermind/XF_Index.png b/mastermind/XF_Index.png new file mode 100644 index 0000000..5bb8ba2 Binary files /dev/null and b/mastermind/XF_Index.png differ diff --git a/mastermind/XF_Index.xmind b/mastermind/XF_Index.xmind new file mode 100644 index 0000000..ec267f5 Binary files /dev/null and b/mastermind/XF_Index.xmind differ diff --git a/setting.inc.json b/setting.inc.json new file mode 100644 index 0000000..785b6b3 --- /dev/null +++ b/setting.inc.json @@ -0,0 +1,8 @@ +{ + "Mysql": { + "Host": "127.0.0.1", + "Port": "3306", + "Username": "Index", + "Password": "qaq061823zcw" + } +} \ No newline at end of file