在每一個PHP腳本的開始,我循環通過可能的POST
和GET
輸入,正確地過濾它們,所以以後當我需要輸入時,我可以使用我的自定義安全過濾變量(這是一個數組,持有POSTS和GETS),我不必觸摸$ _GET和$ _POST。如何過濾和識別PHP中的哈希字符串?
如果變量是哈希值,或者是40個字符的SHA1或64個字符的Adobe Stratus ID,我如何識別它們?
我不希望用戶發佈一些無意義的數據。
在每一個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