コミットを比較
2 コミット
d0eab91d56
...
ec12ccc852
作成者 | SHA1 | 日付 |
---|---|---|
守矢諏訪子 | ec12ccc852 | |
守矢諏訪子 | 5e8c327896 |
|
@ -13,4 +13,7 @@
|
|||
// CURL
|
||||
define('API_URI', '');
|
||||
define('API_AUTH', null);
|
||||
|
||||
// ハッシュ
|
||||
define('PASSWD_PEPPER', ''); // オススメ:pwgen -ycnB1 40
|
||||
?>
|
||||
|
|
|
@ -1,2 +1,31 @@
|
|||
<?php
|
||||
require_once('../config.php');
|
||||
|
||||
function tokengen (int $bytes=24): string {
|
||||
return bin2hex(random_bytes($bytes));
|
||||
}
|
||||
|
||||
function setpasswd (string $password): string {
|
||||
$millisec = 0.05;
|
||||
$cost = 8;
|
||||
|
||||
do {
|
||||
$cost++;
|
||||
$start = microtime(true);
|
||||
password_hash('kero', PASSWORD_ARGON2ID, ['cost' => $cost]);
|
||||
$end = microtime(true);
|
||||
} while (($end - $start) < $millisec);
|
||||
|
||||
$addpepper = hash_hmac('sha256', $password, PASSWD_PEPPER);
|
||||
$addmd5 = md5($addpepper);
|
||||
|
||||
return password_hash($addmd5, PASSWORD_ARGON2ID, ['cost' => $cost]);
|
||||
}
|
||||
|
||||
function verifypasswd (string $raw, string $crypt): bool {
|
||||
$addpepper = hash_hmac('sha256', $raw, PASSWD_PEPPER);
|
||||
$addmd5 = md5($addpepper);
|
||||
|
||||
return password_verify($addmd5, $crypt);
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -1,3 +1,106 @@
|
|||
<?php
|
||||
function loliupload () {}
|
||||
require_once('uuid.php');
|
||||
|
||||
function fileextension ($fname) {
|
||||
$ext = strrpos($fname, '.');
|
||||
|
||||
return $ext === false ? '' : substr($fname, $ext + 1);
|
||||
}
|
||||
|
||||
// ISOはfalseだったら、kB、MB、GB、TBになります。
|
||||
// trueの場合、KiB、MiB、GiB、TiBです。
|
||||
function humanreadablesize (int $byte, bool $iso=true): string {
|
||||
$bit = $iso ? 1024 : 1000;
|
||||
$res = 'B';
|
||||
$size = $byte;
|
||||
|
||||
if ($byte >= ($bit * $bit * $bit * $bit * $bit)) {
|
||||
//dd(5);
|
||||
$size = $byte / ($bit * $bit * $bit * $bit * $bit);
|
||||
$res = $iso ? 'TiB' : 'TB';
|
||||
}
|
||||
else if ($byte >= ($bit * $bit * $bit * $bit)) {
|
||||
//dd(4);
|
||||
$size = $byte / ($bit * $bit * $bit * $bit);
|
||||
$res = $iso ? 'TiB' : 'TB';
|
||||
}
|
||||
else if ($byte >= ($bit * $bit * $bit)) {
|
||||
//dd(3);
|
||||
$size = $byte / ($bit * $bit * $bit);
|
||||
$res = $iso ? 'GiB' : 'GB';
|
||||
}
|
||||
else if ($byte >= ($bit * $bit)) {
|
||||
//dd(2);
|
||||
$size = $byte / ($bit * $bit);
|
||||
$res = $iso ? 'MiB' : 'MB';
|
||||
}
|
||||
else if ($byte >= $bit) {
|
||||
//dd(1);
|
||||
$size = $byte / $bit;
|
||||
$res = $iso ? 'KiB' : 'kB';
|
||||
}
|
||||
//dd($size);
|
||||
|
||||
return number_format($size, 2).' '.$res;
|
||||
}
|
||||
|
||||
function getmimetype (string $fname): string|null {
|
||||
$i = 0;
|
||||
|
||||
foreach ($_FILES as $v) {
|
||||
if ($fname == $v['name'][$i]) {
|
||||
return $v['type'][$i];
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function verifyupload (): array {
|
||||
$res = [];
|
||||
$i = 0;
|
||||
|
||||
foreach ($_FILES as $file) {
|
||||
if ($file['error'][$i] != 0) {
|
||||
$err = '';
|
||||
switch ($file['error'][$i]) {
|
||||
case 1: $err = 'php.iniでの「upload_max_filesize」値が超えています。ファイルサイズ:'.humanreadablesize($file['size'][$i]); break;
|
||||
case 2: $err = 'HTMLフォームの「MAX_FILE_SIZE」値が超えています。ファイルサイズ:'.humanreadablesize($file['size'][$i]); break;
|
||||
case 3: $err = 'ファイルの部分の失敗です。'; break;
|
||||
case 4: $err = 'ファイルをアップロード出来ません。'; break;
|
||||
case 5: $err = '不明'; break;
|
||||
case 6: $err = '仮フォルダがありません。'; break;
|
||||
case 7: $err = 'uploadフォルダに書き込めません。'; break;
|
||||
case 8: $err = '拡張子がありません。'; break;
|
||||
}
|
||||
|
||||
$res[$file['name'][$i]] = $err;
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
function loliupload (array $files): bool {
|
||||
$dir = __DIR__.'/../public/static/upload/';
|
||||
$fname = '';
|
||||
|
||||
if (!file_exists($dir)) {
|
||||
mkdir($dir, 0777);
|
||||
}
|
||||
|
||||
do {
|
||||
$fname = uuid().'.'.fileextension($files['name'][0]);
|
||||
} while (file_exists($dir.$fname));
|
||||
|
||||
if (move_uploaded_file($files['tmp_name'][0], $dir.$fname)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
?>
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
<?php
|
||||
function uuid () {
|
||||
return sprintf(
|
||||
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||||
mt_rand(0, 0xffff), mt_rand(0, 0xffff), // 32bitlow
|
||||
mt_rand(0, 0xffff), // 16bitmid
|
||||
mt_rand(0, 0x0fff) | 0x4000, // 16bithigh
|
||||
mt_rand(0, 0x3fff) | 0x8000, // 16bit|8bithigh|low
|
||||
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) // 48bitnode
|
||||
);
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
$title = 'パスワード創作';
|
||||
$siteurl .= '/hash';
|
||||
$childview = '../ui/hash/index.php';
|
||||
|
||||
if (isset($_POST['password'])) {
|
||||
$setpasswd = setpasswd($_POST['password']);
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
$title = 'アップロード';
|
||||
$sitedesc = 'アップロードです。';
|
||||
$siteurl .= '/upload';
|
||||
$childview = '../ui/upload/index.php';
|
||||
|
||||
if (isset($_FILES['file'])) {
|
||||
//dd($_FILES['file']);
|
||||
//dd(fileextension($_FILES['file']['name'][0]));
|
||||
//dd(humanreadablesize($_FILES['file']['size'][0]));
|
||||
//dd(getmimetype('egaokero.png')); // 存在する
|
||||
//dd(getmimetype('klsdhnjkfjlsdjhnvgf.png')); // 存在しない
|
||||
//dd(verifyupload());
|
||||
dd(loliupload($_FILES['file']));
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,13 @@
|
|||
「mysecurepassword」をお入り下さい。<br />
|
||||
Please enter "mysecurepassword".<br />
|
||||
<form method="POST" action="/hash">
|
||||
<input type="password" name="password" />
|
||||
<input type="submit" value="送信" />
|
||||
</form>
|
||||
|
||||
<?php
|
||||
if (isset($_POST['password'])) {
|
||||
echo '創作したパスワード(plaintext→sha256+pepper→md5→Argon2id): '.$setpasswd.'<br />';
|
||||
echo 'ポスワードは「mysecurepassword」ですか?:'.(verifypasswd('mysecurepassword', $setpasswd) ? 'はい' : 'いいえ');
|
||||
}
|
||||
?>
|
|
@ -0,0 +1,4 @@
|
|||
<form method="POST" action="/upload" enctype="multipart/form-data">
|
||||
<input type="file" name="file" />
|
||||
<input type="submit" name="submit" value="送信" />
|
||||
</form>
|
読み込み中…
新しいイシューから参照