commit
7ffffdaf9d
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -1 +1,8 @@
|
|||
# 禁止上传的目录
|
||||
/node_modules/
|
||||
/package.json
|
||||
/package-lock.json
|
||||
/build/
|
||||
/.htaccess
|
||||
/.user.ini
|
||||
/idea/
|
68
Class/Sql.php
Normal file
68
Class/Sql.php
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright © 2016 - 2023 筱锋xiao_lfeng. All Rights Reserved.
|
||||
* 开发开源遵循 MIT 许可,若需商用请联系开发者
|
||||
* https://www.x-lf.com/
|
||||
*/
|
||||
|
||||
class Sql
|
||||
{
|
||||
/**
|
||||
* @return false|mysqli
|
||||
*/
|
||||
public static function MySqlConn() {
|
||||
// 从文件获取数据
|
||||
$Array_ConfigData = null;
|
||||
$FileData = fopen(dirname(__FILE__,3)."/setting.inc.json",'r');
|
||||
while (!feof($FileData))
|
||||
$Array_ConfigData .= fgetc($FileData);
|
||||
$Array_ConfigData = json_decode($Array_ConfigData,JSON_UNESCAPED_UNICODE);
|
||||
fclose($FileData);
|
||||
|
||||
//判断数据库端口
|
||||
if($Array_ConfigData['Mysql']['Port'] == 3306 or $Array_ConfigData['Mysql']['Port'] == NULL) $Array_ConfigData['Mysql']['Port'] = 3306;
|
||||
|
||||
return mysqli_connect($Array_ConfigData['Mysql']['Host'],$Array_ConfigData['Mysql']['Username'],$Array_ConfigData['Mysql']['Password'],null,$Array_ConfigData['Mysql']['Port']);
|
||||
}
|
||||
|
||||
/**
|
||||
* MySQL查找库
|
||||
* @param string $Mysql_Query
|
||||
* @return string[] 查找到结果返回结果
|
||||
*/
|
||||
public static function SELECT(string $Mysql_Query): array {
|
||||
$Array_Push = null;
|
||||
$Array_OutPut = [
|
||||
'output'=>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;
|
||||
}
|
||||
}
|
||||
}
|
123
Class/Token.php
Normal file
123
Class/Token.php
Normal file
|
@ -0,0 +1,123 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright © 2016 - 2023 筱锋xiao_lfeng. All Rights Reserved.
|
||||
* 开发开源遵循 MIT 许可,若需商用请联系开发者
|
||||
* https://www.x-lf.com/
|
||||
*/
|
||||
|
||||
class Token
|
||||
{
|
||||
/** @var int|null Token生成长度 */
|
||||
public int $Data_TokenLong;
|
||||
/** @var string 生成的Token或获取的Token */
|
||||
public ?string $Data_Token = null;
|
||||
/** @var bool 检查是否是Token创建模式 */
|
||||
public bool $Data_TokenCreate;
|
||||
|
||||
/**
|
||||
* @param int|null $Token_Long 获取Token计算长度
|
||||
* @param bool $Token_Create 是否为 Token 创建模式
|
||||
*/
|
||||
public function __construct(int $Token_Long, bool $Token_Create)
|
||||
{
|
||||
$this->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";
|
||||
}
|
||||
}
|
31
LICENSE
Normal file
31
LICENSE
Normal file
|
@ -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.
|
||||
|
||||
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地处理本软件的权限,
|
||||
包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售软件的副本,
|
||||
并允许获得软件的人这样做,但须满足以下条件:
|
||||
|
||||
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。
|
||||
|
||||
本软件“按原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、
|
||||
特定用途的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,
|
||||
无论是在合同诉讼、侵权行为还是其他方面,由软件或软件的使用或其他交易引起、由软件引起或与之相关软件。
|
BIN
mastermind/XF_Index.png
Normal file
BIN
mastermind/XF_Index.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 290 KiB |
BIN
mastermind/XF_Index.xmind
Normal file
BIN
mastermind/XF_Index.xmind
Normal file
Binary file not shown.
8
setting.inc.json
Normal file
8
setting.inc.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"Mysql": {
|
||||
"Host": "127.0.0.1",
|
||||
"Port": "3306",
|
||||
"Username": "Index",
|
||||
"Password": "qaq061823zcw"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user