"Typon" Ver.20190609.
Typonのフレーム部分は動いていて、それぞれの関数は確かめてない版だ
動作チェックできてないので、使うなよ。責任は取らんぞ
以上
-------[index.php]-------
<?php
// Typon Seting.
define("typonDomain", "localhost");
define("typonExecNo", 0);
define("typonExecDir", "frames/");
define("typonDataDir", "data/");
define("typonSessionName", "Heni39EDc");
define("typonHashSeed", "edJIe23Om");
define("typonDebug", 0);
// Session Seting.
ini_set('session.cookie_httponly', 1); // http only.
ini_set('session.use_strict_mode', 1); // server mode only.
// ini_set('session.cookie_secure', 1); // if https then.
// ヌルバイトアタック処理
function sanitizer($array) {
if (is_array($array)) {
return array_map('sanitizer', $array);
}
return str_replace("\0", "", $array);
}
$_POST = sanitizer($_POST);
$_COOKIE = sanitizer($_COOKIE);
$_SERVER = sanitizer($_SERVER);
$_GET = array(); // Delete gets.
// Typon Debug Check.
if (typonDebug == 1) {
$error = 0;
if (!preg_match('/\A'.typonDomain.'/i', $_SERVER['SERVER_NAME'])) {
$error = 1;
} elseif (!file_exists(typonDataDir)) {
$error = 1;
} elseif (!file_exists(typonExecDir)) {
$error = 1;
} elseif (!file_exists(typonExecDir."toppage.frame")) {
$error = 1;
}
if ($error == 1) {
echo("[Typon] Error.");
} else {
echo("[Typon] No Error.");
}
exit;
}
// ドメインチェック
if (!preg_match('/\A'.typonDomain.'/i', $_SERVER['SERVER_NAME'])) {
// 不正アクセス
echo("[Typon] Domain name Error."); exit;
}
// md Setting.
mb_language("Japanese");
mb_internal_encoding("UTF-8");
// セッションIDリセット
session_name(typonSessionName);
session_start();
session_regenerate_id(true);
//Get $_GET.
$requestDATA = STD::cmdline();
// プレゼンテーターネームチェック
$exec = $requestDATA['0'];
if ($exec == "") {
// "/"なのでtoppageを実行。indexはindex.phpと競合する
$exec = "toppage";
$requestDATA['0'] = $exec;
} elseif (!preg_match('/\A[a-zA-Z0-9\-\_]+\z/i', $exec)) {
// 不正アクセスなのでログアウト
STD::logout();
exit;
}
// プレゼンテーターがあるか?
if (! file_exists(typonExecDir.$exec.".frame")) {
if ($exec == "toppage") {
// error.
echo("[Typon] Error: No thing [toppage.frame].");
exit;
} else {
// 不正アクセスなのでログアウト
STD::logout();
exit;
}
}
// 実行
require_once(typonExecDir.$exec.".frame");
exit;
class STR {
// 全角トリム
function mbTrim($str) {
$str = self::toUtf8($str);
$str = preg_replace('/[\r\n]/u', '', $str);
return preg_replace('/\A[\p{C}\p{Z}]++|[\p{C}\p{Z}]++\z/u', '', $str);
}
// UTF変換
function toUtf8($str) {
return mb_convert_encoding($str, "UTF-8", "auto");
}
// Nullバイト削除
function nullDelete($str) {
return str_replace("\0", "", $str);
}
// <br>変換
function toBr($str) {
$str = preg_replace('/\n\r/u', '\r\n', $str);
$str = preg_replace('/\r\n/u', '\r', $str);
$str = preg_replace('/\n/u', '\r', $str);
$str = preg_replace('/\r/u', '<br>', $str);
return $str;
}
function toRn($str) {
$str = preg_replace('/<br>/u', '\r\n', $str);
return $str;
}
function len($str) {
return mb_strlen($str);
}
function checkNull($str) {
return empty($str);
}
function htmlConvert($str) {
return htmlspecialchars($str, ENT_QUOTES);
}
function randomText($len) {
$char = array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'));
$salt = "";
for ($i = 0; $i < $len; $i++) {
$salt .= $char[mt_rand(0, count($char) - 1)];
}
return $salt;
}
function checkUrl($str) {
return preg_match('/\Ahttps?(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)\z/', $str);
}
function checkPassword($str) {
return preg_match('/\A[a-zA-Z0-9]+\z/i', $str);
}
function checkNumber($str) {
return preg_match('/\A[0-9]+\z/i', $str);
}
function checkMail($str) {
// https://gist.github.com/felds/864067
$regexp = '/^(?:[a-z0-9!#$%\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}'.
'~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\['.
'\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-'.
'9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-'.
'9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?'.
'|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-' .
'\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/';
return preg_match($regexp, $str);
}
}
class FORM {
function session() {
$_SESSION['session'] = STR::randomText(60);
return $_SESSION['session'];
}
function sessionCheck($str) {
$check = $_SESSION['session'];
$_SESSION['session'] = null;
if ($check == $str) {
return true;
} else {
return false;
}
}
}
class STD {
// GET取得
function cmdline() {
$str = trim($_SERVER['REQUEST_URI'], "\/");
$data = explode("/", $str);
if (typonExecNo > 0) {
for ($i = 0; $i < typonExecNo; $i++) {
unset($data[$i]);
}
$data = array_values($data);
}
return $data;
}
// ドメインチェック
function refererCheck() {
if (!preg_match('/\Ahttps?(\:\/\/)'.typonDomain.'[\:\/]/i', $_SERVER['HTTP_REFERER'])) {
// 不正アクセスなのでログアウト
self::reset();
exit;
}
}
// Loginセーブ
function loginSave($userId) {
$_SESSION['id'] = $userId;
STD::uidMake($userId);
}
// Loginチェック
function loginCheck() {
if (empty($_SESSION['id'])) {
self::logout();
exit;
} else {
self::refererCheck();
}
}
// ログアウト
function logout() {
$_SESSION = array();
// クッキーを削除
setcookie(typonSessionName, '', time()-1000);
setcookie(typonSessionName, '', time()-1000, '/');
session_destroy();
header("Location: /");
}
// uID.
function uidMake() {
$user_id = $_SESSION['id'].STR::randomText(60);
$user_id = hash_hmac("ripemd160", $user_id, typonHashSeed);
$_SESSION['uid'] = $user_id;
return $_SESSION['uid'];
}
function uidCheck($str) {
$uid = $_SESSION['uid'];
// self::uidMake($_SESSION['id']);
if ($_SESSION['uid'] == $str) {
return true;
}
return false;
}
function uidGet() {
return $_SESSION['uid'];
}
// time.
function timeSectime($y, $mon, $d, $a, $m) {
return mktime($a, $m, 0, $mon, $d, $y);
}
function timeDateRss($sectime) {
return date(DATE_RFC822, $sectime);
}
function timeDate($sectime) {
return getdate($sectime);
}
}
class DB {
var $db;
// mysql
function make() {
if (empty($this->db)) {
$this->db = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
}
return $this->db;
}
function get() {
return self::make();
}
function error() {
$str = "";
if($this->db->connect_errno) {
$str = $this->db->connect_errno . ' : ' . $this->db->connect_error;
}
return $str;
}
function close() {
mysqli_close($this->db);
}
// JSON.
function jsonWrite($data, $array) {
$file = typonDataDir."{$data}.data";
if (! file_exists($file)) {
return false;
}
if (file_put_contents($file, serialize($array)) == false) {
return false;
}
return true;
}
function jsonRead($data) {
$json = array();
$file = typonDataDir."{$data}.data";
if (! file_exists($file)) {
return $json;
}
$json = unserialize(file_get_contents($file));
return $json;
}
}
class MAIL {
function send($toAdrs, $fromAdrs, $subject, $body) {
if (!STR::checkMail($toAdrs)) {
return false;
} elseif (!STR::checkMail($fromAdrs)) {
return false;
}
$header = "From: $fromAdrs\nReply-To: $fromAdrs\n";
return mb_send_mail($toAdrs, $subject, $body, $header);
}
}
class SONOTA {
// Make Crypt's Salt.
function makeSalt() {
$char = array_merge(range('a', 'z'), range('A', 'Z'), array('.', '/'));
$salt = "$2y$07$";
for ($i = 0; $i < 22; $i++) {
$salt .= $char[mt_rand(0, count($char) - 1)];
}
$salt .= "$";
return $salt;
}
}
?>