Aura.Web



简介

暂未添加。。。



基本用法


实例化Web环境

最简单的方法就是直接调用aura.web/scripts/instance.php脚本。

$webcontext = require '/path/to/aura.web/scripts/instance.php';

NOTE: 如果$csrf_secret_key$csrf_user_id变量在aura.web/scripts/instance.php调用前仍未定义,那么CSRF测试将不可用。调用aura\web\Context->isCsrf()将抛出aura\web\Exception_Context异常。

get*方法

getQuery($key, $alt = null)
getInput($key, $alt = null)
getServer($key, $alt = null)
getCookie($key, $alt = null)
getEnv($key, $alt = null)
getheader($key, $alt = null)
getAccept($key, $alt = null)

可用的属性:

get
post
cookies
server
env
files
header


获取URL $_GET值

// example query: ?id=101&sort=desc

echo $webcontext->getQuery('id');

// The page key does not exist, null is returned
var_dump($webcontext->getQuery('page'));

// The page key does not exist, alt is returned
echo $webcontext->getQuery('page', 1);

// fetch entire query
print_r($webcontext->getQuery());

结果如下:

101
null
1
array('id' => 101, 'sort' => 'desc')


获取用户提交数据:

用户提交的数据是$post[key]$files[key]的组合,且file优先级高于post。

$comment = $webcontext->getInput('comment');


获取HTTP接受头部

如果想获取'content-type',请求type即可;如果想获取如'Accept_Language',请求language即可。

// Accept-Language: en;q=0.7, en-US
$lang = $webcontext->getAccept('language');
print_r($lang);

其结果是一个数组;数组的键是接受的值,数组的值是品质因数。结果是按品质因素排序的,第一个结果有最高的品质因素。

示例:

array(
    'en-US' => 1.0,
    'en'    => 0.7,
)


魔术引用

PHP 5.3已经弃用魔术引用,而且默认是禁用的。所以aura\web\Context不再测试或移除魔术引用。



高级用法


接收json、xml或其他类型的内容输入

如果Content-type不是multipart/form-data,且在未经任何处理,POST或PUT请求的原始输入为$key=null

Content-type=text/xml的POST或PUT示例:

$xml = $webcontext->getInput();
echo $xml;

结果:

<xml>
    <value>Hello world!</value>
</xml>


重写HTTP请求方法

HTTP请求方法可以被HTTP头部或POST数组键名覆盖。如果HTTP头部和POST数组有X-HTTP-Method-Override一项,HTTP头部的值优先级最高。

HTTP头部示例:

header('X-HTTP-Method-Override: PUT');

POST示例:

使用X-HTTP-Method-Override作为POST数组键名。 NOTE: 键名是大小写敏感的。

<form action="/Comment/1" method="post">
    <input type="image" src="/images/remove-icon.png" alt="Delete" />
    <input name="X-HTTP-Method-Override" type="hidden" value="DELETE" />
</form>


Aura Web Csrf

一个产生和验证CSRF令牌的类库。aura\web\CSrf构造器有两个必须的参数:

  1. $secret_key: 一个随机的字符串,由项目指定。在请求期间应该保持一致。
  2. $user_id: 对用户来唯一的字符串,在请求期间应该保持一致。例如,用户邮件地址或用户表中该用户的主键,任何对用户唯一的字符串都行,除了用户密码。

和两个可选参数:

  1. $timeout: CSRF令牌的有效期。默认是1800秒。
  2. $hash_algo: 哈希算算法。请查看hash_algos(),该页列出了所有注册的哈希算法。这里默认使用sha1算法。


使用Aura Web CSRF

创建一个独立的ura\web\Csrf实例:

use aura\web\Csrf as Csrf;

require '/path/to/aura.web/Csrf.php';
require '/path/to/aura.web/Exception/MalformedToken.php';

$server_secret = 'my-random-secret';
$user_id       = $user->getEmail();

$csrf = new Csrf($server_secret, $user_id);

产生CSRF令牌:

$token = $csrf->generateToken();
echo $token;

结果如下:

5199173921e7cc91dbee3145088af35e22df1d3|1299425613|2648677304d73a94de97218.48580521

验证令牌:

try {
    if ($csrf->isValidToken($_POST['__csrf_token'])) {
        echo 'Not a CSRF attack.';
    } else {
        echo 'Invalid CSRF token.
        exit();
    }
} catch (Exception_MalformedToken $e) {
    echo 'Malformed CSRF token.';
    exit();
}

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>