简介
暂未添加。。。
基本用法
实例化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构造器有两个必须的参数:
$secret_key: 一个随机的字符串,由项目指定。在请求期间应该保持一致。$user_id: 对用户来唯一的字符串,在请求期间应该保持一致。例如,用户邮件地址或用户表中该用户的主键,任何对用户唯一的字符串都行,除了用户密码。
和两个可选参数:
$timeout: CSRF令牌的有效期。默认是1800秒。$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(); }