合并拉取请求 #1

合并推送
This commit is contained in:
筱锋xiao_lfeng 2023-05-02 10:48:05 +08:00 committed by GitHub
commit 7ffffdaf9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 238 additions and 0 deletions

7
.gitignore vendored
View File

@ -1 +1,8 @@
# 禁止上传的目录
/node_modules/ /node_modules/
/package.json
/package-lock.json
/build/
/.htaccess
/.user.ini
/idea/

68
Class/Sql.php Normal file
View 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
View 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
View 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.
特此免费授予获得本软件和相关文档文件(“软件”)副本的任何人不受限制地处理本软件的权限,
包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售软件的副本,
并允许获得软件的人这样做,但须满足以下条件:
上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。
本软件“按原样”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、
特定用途的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,
无论是在合同诉讼、侵权行为还是其他方面,由软件或软件的使用或其他交易引起、由软件引起或与之相关软件。

1
README.md Normal file
View File

@ -0,0 +1 @@
# XF_Index

BIN
mastermind/XF_Index.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

BIN
mastermind/XF_Index.xmind Normal file

Binary file not shown.

8
setting.inc.json Normal file
View File

@ -0,0 +1,8 @@
{
"Mysql": {
"Host": "127.0.0.1",
"Port": "3306",
"Username": "Index",
"Password": "qaq061823zcw"
}
}