0

在每个 php 脚本的开头,我循环遍历可能的POSTGET输入,正确过滤它们,所以稍后当我需要输入时,我可以使用我的自定义、安全、过滤变量(它是一个包含 POSTS 和 GETS 的数组) 而且我不必碰 $_GET 和 $_POST。

如果变量是散列值、40 个字符的 SHA1 或 64 个字符的 Adob​​e Stratus ID,我如何识别它们?

我不希望用户发布一些无意义的数据。

4

4 回答 4

1

测试一个字符串是否为轴长哈希值:

$x = 40
$string = "inputstring";
$boolResult = (preg_match('/^[0-9a-f]{'$x'}$/i', $string) == true) ? true : false;
于 2013-05-07T11:05:04.140 回答
0

您可以将 SHA1 哈希与正则表达式匹配,例如:

/[0-9a-f]{40}/

在 PHP 中:

foreach($_GET as $get) {
    if (preg_match('/[0-9a-f]{40}/i', $get)) {
        // do something
    }
}
于 2013-05-07T11:11:47.243 回答
0

我不同意您应该避免 _POST 和 _GET 访问,而是应该尽可能清理它们以避免 XSS。(https://en.wikipedia.org/wiki/Cross-site_scripting)。CodeIgniter 有一个很棒的安全库,你可以捏住并插入你自己的东西。

除此之外,我不确定......但我认为你是在要求从会话中解密散列值?

于 2013-05-07T10:52:11.720 回答
0

当大多数哈希shamd5返回十六进制格式时..您可以使用轻松检测它们ctype_xdigit

if (ctype_xdigit($value)) {
    // It must be Hex
}

我不知道是什么Adobe Stratus ID样子,但你也可以很容易地验证它preg_match

有些也可以进来base64你也可以用

if ( base64_encode(base64_decode($data)) === $data){
   // it must be base 64
}
于 2013-05-07T10:58:48.023 回答