2013-05-07 72 views
0

在每一個PHP腳本的開始,我循環通過可能的POSTGET輸入,正確地過濾它們,所以以後當我需要輸入時,我可以使用我的自定義安全過濾變量(這是一個數組,持有POSTS和GETS),我不必觸摸$ _GET和$ _POST。如何過濾和識別PHP中的哈希字符串?

如果變量是哈希值,或者是40個字符的SHA1或64個字符的Adobe Stratus ID,我如何識別它們?

我不希望用戶發佈一些無意義的數據。

+0

您想確保一個變量包含40或60個字符長的字母數字字符串嗎? – 2013-05-07 10:50:34

+0

Adob​​e Stratus ID允許使用哪些字符?順便說一下,Stratus現在稱爲Cirrus。 – Pietu1998 2013-05-07 10:51:33

+0

對於SHA1,你應該檢查這個問題:http://stackoverflow.com/questions/2982059/testing-if-string-is-sha1-in-php – Juampi 2013-05-07 10:52:35

回答

1

要測試字符串是否是斧長度的散列值或不:

$x = 40 
$string = "inputstring"; 
$boolResult = (preg_match('/^[0-9a-f]{'$x'}$/i', $string) == true) ? true : false; 
0

我不同意你應該避免_POST和_GET訪問,但相反你應該儘可能的清理它們以避免XSS。 (https://en.wikipedia.org/wiki/Cross-site_scripting)。 CodeIgniter有一個很好的安全庫,你可以捏和插入你自己的東西。

除此之外,我不確定...但我認爲您要求解密來自會話的哈希值?

+0

不可能解密。我想要的只是一個布爾值,如果一個字符串是一個散列或者不是一個散列。 – 2013-05-07 11:00:52

+0

我認爲這已經在這裏得到解答:http://stackoverflow.com/questions/2089428/possible-to-identify-hash-type – 2013-05-07 11:04:03

0

當大多數哈希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 
} 
0

可以搭配使用SHA1哈希正則表達式,如:

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

在PHP中:

foreach($_GET as $get) { 
    if (preg_match('/[0-9a-f]{40}/i', $get)) { 
     // do something 
    } 
}