如何过滤和识别PHP中的哈希字符串?
在每一个PHP脚本的开始,我循环通过可能的POST
和GET
输入,正确地过滤它们,所以以后当我需要输入时,我可以使用我的自定义安全过滤变量(这是一个数组,持有POSTS和GETS),我不必触摸$ _GET和$ _POST。如何过滤和识别PHP中的哈希字符串?
如果变量是哈希值,或者是40个字符的SHA1或64个字符的Adobe Stratus ID,我如何识别它们?
我不希望用户发布一些无意义的数据。
要测试字符串是否是斧长度的散列值或不:
$x = 40
$string = "inputstring";
$boolResult = (preg_match('/^[0-9a-f]{'$x'}$/i', $string) == true) ? true : false;
我不同意你应该避免_POST和_GET访问,但相反你应该尽可能的清理它们以避免XSS。 (https://en.wikipedia.org/wiki/Cross-site_scripting)。 CodeIgniter有一个很好的安全库,你可以捏和插入你自己的东西。
除此之外,我不确定...但我认为您要求解密来自会话的哈希值?
不可能解密。我想要的只是一个布尔值,如果一个字符串是一个散列或者不是一个散列。 – 2013-05-07 11:00:52
我认为这已经在这里得到解答:http://stackoverflow.com/questions/2089428/possible-to-identify-hash-type – 2013-05-07 11:04:03
当大多数哈希sha
的,md5
等返回十六进制格式..你可以很容易地发现他们使用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
}
可以搭配使用SHA1哈希正则表达式,如:
/[0-9a-f]{40}/
在PHP中:
foreach($_GET as $get) {
if (preg_match('/[0-9a-f]{40}/i', $get)) {
// do something
}
}
您想确保一个变量包含40或60个字符长的字母数字字符串吗? – 2013-05-07 10:50:34
Adobe Stratus ID允许使用哪些字符?顺便说一下,Stratus现在称为Cirrus。 – Pietu1998 2013-05-07 10:51:33
对于SHA1,你应该检查这个问题:http://stackoverflow.com/questions/2982059/testing-if-string-is-sha1-in-php – Juampi 2013-05-07 10:52:35