input type=file спамят

MiksIr

miksir@home:~$
Сессии нахрен не нужны для того, что предлагает флоппик
PHP:
    public function getClientToken($timed = true, $prefix = null, $suffix = '', $algo = 'sha256', $ip_part = 2)
    {
        $time = $timed ? (is_numeric($timed) ? time() + $timed : time() + $this->token_expire) : 0;
        $token = $this->_getClientToken($time, $prefix, $suffix, $algo, $ip_part);
        return $token;
    }

    protected function _getClientToken($time, $prefix, $suffix, $algo, $ip)
    {
        $ipaddr = explode('.', $_SERVER['REMOTE_ADDR']);
        $ipaddr = $ip ? implode('.', array_slice($ipaddr, 0, $ip)) : '';
        return
            $this->_hash($algo,
                        $prefix
                        . $ipaddr
                        . (array_key_exists('HTTP_USER_AGENT', $_SERVER) ? md5($_SERVER['HTTP_USER_AGENT']) : '')
                        . что-угодно, например PHPSESSION кука
                        . ключ приложения из конфига (случайна строка)
                        . (int)$time
                        . $suffix)
            . sprintf("%08s", dechex($time));
    }

    protected function _hash($algo, $value)
    {
        if (function_exists("hash_algos")) {
            $algos = hash_algos();
            if (in_array($algo, $algos)) {
                return hash($algo, $value);
            }
        }

        return sha1($value);
    }

    public function verifyClientToken($token, $prefix = null, $suffix = '', $algo = 'sha256', $ip_part = 2)
    {
        $time = substr($token, -8, 8);
        $time = (int)hexdec($time);

        $sign = $this->_getClientToken($time, $prefix, $suffix, $algo, $ip_part);

        if ($token != $sign) {
            $this->getLogger()->log("Tokens missmatch {$token} != {$sign}");
            return false;
        }

        if ($time && $time < time()) {
            $this->getLogger()->log("Token {$token} expired");
            return false;
        }

        return true;
    }
Это по сути то, что securelink делает. Но по ходу ему это не поможет - там JS форму исполняет со страницы.
 
Сверху