亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
為什麼mt_rand()不安全
使用random_int()進(jìn)行關(guān)鍵安全代碼
常見(jiàn)的錯(cuò)誤和陷阱
向後兼容性:PHP <7.0
mt_rand()什麼時(shí)候還可以?
首頁(yè) 後端開(kāi)發(fā) php教程 從`mt_rand`到`random_int`:生成密碼固定的數(shù)字

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字

Jul 28, 2025 am 04:42 AM
PHP Numbers

MT_RAND()對(duì)於加密目的而言並不安全,因?yàn)樗褂玫氖钱a(chǎn)生可預(yù)測(cè)輸出的Mersenne Twister算法,可能是種子不佳,並且不是為安全設(shè)計(jì)而設(shè)計(jì)的。 2。對(duì)於安全的隨機(jī)數(shù)生成,請(qǐng)使用Random_int(),因?yàn)樗菑牟僮飨到y(tǒng)的密碼安全的pseudorandom數(shù)字生成器(CSPRNG)中汲取的,並且對(duì)預(yù)測(cè)和計(jì)時(shí)攻擊具有抵抗力。 3。避免常見(jiàn)錯(cuò)誤,例如假設(shè)所有隨機(jī)函數(shù)都是等效的,random_int()中的不當(dāng)範(fàn)圍,或組合安全和不安全的函數(shù),例如Random_int()和MT_RAND()(破壞安全性)。 4。對(duì)於早於7.0的PHP版本,請(qǐng)通過(guò)Composer安裝Paragonie/Random_compat庫(kù)以允許使用Random_int()和Random_bytes()。 5。 MT_RAND()僅對(duì)於非安全性敏感的任務(wù),例如調(diào)整測(cè)驗(yàn)問(wèn)題,生成UI ID或不可預(yù)測(cè)性並不重要的遊戲機(jī)制。 6。在處理身份驗(yàn)證令牌,會(huì)話鍵,密碼重置或任何面向用戶的秘密時(shí),請(qǐng)始終使用諸如Random_int()的密碼安全功能,以確??煽康陌踩?。

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字

多年來(lái),PHP中的隨機(jī)數(shù)已經(jīng)顯著發(fā)展,尤其是在安全方面。如果您仍在使用mt_rand()進(jìn)行敏感操作,例如生成令牌,密碼或會(huì)話密鑰,那麼該升級(jí)了。這是為什麼以及如何從mt_rand()轉(zhuǎn)移到random_int()以獲取密碼安全的數(shù)字生成。

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字

為什麼mt_rand()不安全

mt_rand()使用Mersenne Twister算法,這非常適合模擬,遊戲或洗牌數(shù)據(jù),但對(duì)於密碼學(xué)來(lái)說(shuō)卻不安全

  • 可預(yù)測(cè)的輸出:給定足夠的輸出,攻擊者可以反向工程內(nèi)部狀態(tài)並預(yù)測(cè)未來(lái)的值。
  • 默認(rèn)情況下未正確播種:尤其是在較舊的PHP版本中,播種可能很弱或基於諸如時(shí)間戳等可預(yù)測(cè)值。
  • 不是為安全設(shè)計(jì)而設(shè)計(jì)的:這是用於性能的偽隨機(jī)數(shù)生成器(PRNG),而不是不可預(yù)測(cè)性。

示例:如果您使用mt_rand(1, 1000000)生成密碼重置令牌,則攻擊者可能會(huì)隨著時(shí)間的推移而爆炸或預(yù)測(cè)可能的值。

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字

使用random_int()進(jìn)行關(guān)鍵安全代碼

PHP 7引入了random_int() ,這是random擴(kuò)展的一部分(內(nèi)置為PHP 7.0),該擴(kuò)展名生成了密碼固定的隨機(jī)整數(shù)

 $ SECURERANDOMNUMBER = RONARAM_INT(1,1000000);

此功能:

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字
  • 從OS級(jí)別的CSPRNG中汲取隨機(jī)性(例如Linux上的/dev/urandom或Windows上的CryptGenRandom )。
  • 抵抗預(yù)測(cè)和計(jì)時(shí)攻擊。
  • 只有當(dāng)系統(tǒng)的熵池是空的(在現(xiàn)代系統(tǒng)上非常罕見(jiàn))時(shí),才能阻止。

?當(dāng)需要不可預(yù)測(cè)的數(shù)字時(shí),請(qǐng)使用random_int()

  • CSRF令牌
  • 密碼重置鍵
  • 會(huì)話標(biāo)識(shí)符(儘管PHP內(nèi)部處理此操作)
  • 任何面向用戶的秘密

常見(jiàn)的錯(cuò)誤和陷阱

即使使用random_int() ,開(kāi)發(fā)人員也可以滑倒:

  • 假設(shè)所有隨機(jī)函數(shù)都是相等的
    不要屬於用mt_rand() rand()並將其稱為“固定”的陷阱。只有random_int() , random_bytes()或諸如paragonie/random_compat之類的庫(kù)是安全的。

  • 範(fàn)圍處理不當(dāng)
    random_int($min, $max)必須具有有效的界限。避免使用負(fù)範(fàn)圍或$min > $max 。

  • 試圖“改善”隨機(jī)性
    不要做這樣的事情:

     //?不這樣做
    $ num = Random_int(1,100) * mt_rand(1,10);

    混合安全和不安全的來(lái)源會(huì)削弱結(jié)果。


向後兼容性:PHP <7.0

如果您卡在PHP 5.X上,請(qǐng)使用paragonie/random_compat庫(kù):

作曲家需要Paragonie/Random_compat

現(xiàn)在您可以安全地使用:

 $ SecureNumber = Random_int(1,100);
$ bytes = Random_bytes(16);

它使用安全源,即使在較舊的PHP版本上,它都可以使用random_int()random_bytes() 。


mt_rand()什麼時(shí)候還可以?

mt_rand()仍然有有效的用途 - 只是安全性的地方並不重要:

  • 改組一個(gè)測(cè)驗(yàn)問(wèn)題清單
  • 為UI元素生成非敏感ID
  • 公平性≠安全性的遊戲機(jī)制

但是如有疑問(wèn),請(qǐng)使用random_int() 。


基本上,如果它觸及用戶身份驗(yàn)證,訪問(wèn)控製或秘密,則可以在密碼上安全。從mt_rand()random_int()的切換是簡(jiǎn)單,安全且適合未來(lái)的。

以上是從`mt_rand`到`random_int`:生成密碼固定的數(shù)字的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
國(guó)際化和可讀性的高級(jí)數(shù)字格式 國(guó)際化和可讀性的高級(jí)數(shù)字格式 Jul 27, 2025 am 04:32 AM

UseIntl.NumberFormatwithuser-specificlocalesforcorrectdigitgroupinganddecimalseparators.2.Formatcurrencyusingstyle:'currency'withISO4217codesandlocale-specificsymbolplacement.3.ApplycompactnotationforlargenumberstoenhancereadabilitywithunitslikeMor??

精確事項(xiàng):PHP的BCMATH擴(kuò)展的財(cái)務(wù)計(jì)算 精確事項(xiàng):PHP的BCMATH擴(kuò)展的財(cái)務(wù)計(jì)算 Jul 26, 2025 am 09:43 AM

使用BCMath擴(kuò)展是解決PHP金融計(jì)算精度問(wèn)題的關(guān)鍵,因?yàn)樗ㄟ^(guò)字符串進(jìn)行任意精度的十進(jìn)制運(yùn)算,避免了浮點(diǎn)數(shù)的捨入誤差;2.必須始終以字符串形式傳入數(shù)值並設(shè)置scale參數(shù)(如bcadd('0.1','0.2',2)),以確保結(jié)果精確到所需的小數(shù)位;3.避免將浮點(diǎn)數(shù)直接傳給BCMath函數(shù),因其在傳參前已丟失精度;4.可通過(guò)bcscale(2)設(shè)置全局小數(shù)位數(shù),確保財(cái)務(wù)計(jì)算統(tǒng)一保留兩位小數(shù);5.BCMath默認(rèn)截?cái)喽撬膾挝迦?,需自行?shí)現(xiàn)四捨五入邏輯(如通過(guò)bcround函數(shù));6.輸入值需驗(yàn)

從`mt_rand`到`random_int`:生成密碼固定的數(shù)字 從`mt_rand`到`random_int`:生成密碼固定的數(shù)字 Jul 28, 2025 am 04:42 AM

mt_rand()isNotsecureCryptographicposePoseSitusEsthemerSennetWisterAlgorithm,whtroducesProdiCesProdiCtableOutput,Maybepoorlyseeded,andisnotdesignedforsecurity.2.2.forsecurererandomnumnumnumnumnumnumnumnumnumnumnumnumnumnumbergeneration,UsserandSty,inserandsyterstranseftsfors

超越php_int_max:用GMP和BIGINT處理大整數(shù) 超越php_int_max:用GMP和BIGINT處理大整數(shù) Jul 27, 2025 am 04:24 AM

當(dāng)需要處理超過(guò)PHP_INT_MAX(如9223372036854775807)的整數(shù)時(shí),1.應(yīng)使用GMP擴(kuò)展或brick/math等任意精度數(shù)學(xué)庫(kù);2.GMP基於C庫(kù),性能高但需服務(wù)器支持;3.brick/math為純PHP實(shí)現(xiàn),便於移植但速度較慢;4.初始化大數(shù)時(shí)必須用字符串防止精度丟失;5.所有操作應(yīng)避免浮點(diǎn)數(shù)參與以確保精度。最終選擇取決於環(huán)境控製程度、性能需求與代碼風(fēng)格偏好,但都需以字符串方式安全初始化大整數(shù)。

強(qiáng)大的數(shù)字驗(yàn)證:`is_numeric()`vs.` filter_var() 強(qiáng)大的數(shù)字驗(yàn)證:`is_numeric()`vs.` filter_var() Jul 28, 2025 am 04:39 AM

is_numeric()checksifavaluecanbeinterpretedasanumber,acceptingformatslikehex,scientificnotation,andwhitespace,butonlyreturnsabooleanwithouttypecasting.2.filter_var()withFILTER_VALIDATE_INTorFILTER_VALIDATE_FLOATvalidatesandsanitizesbyreturningtheactua

PHP的數(shù)字類型雜耍和脅迫的危險(xiǎn)和力量 PHP的數(shù)字類型雜耍和脅迫的危險(xiǎn)和力量 Jul 26, 2025 am 09:38 AM

PHP的鬆散類型系統(tǒng)在數(shù)字類型轉(zhuǎn)換中既強(qiáng)大又危險(xiǎn)。 1.使用鬆散比較(==)時(shí),PHP會(huì)將非數(shù)字字符串轉(zhuǎn)為0,導(dǎo)致'hello'==0為true,可能引發(fā)安全漏洞,應(yīng)始終在需要時(shí)使用嚴(yán)格比較(===)。 2.算術(shù)運(yùn)算中,PHP會(huì)靜默轉(zhuǎn)換字符串,如'10apples'變?yōu)?0,而'apples10'變?yōu)?,可能導(dǎo)致計(jì)算錯(cuò)誤,應(yīng)使用is_numeric()或filter_var()驗(yàn)證輸入。 3.數(shù)組鍵中,數(shù)字字符串如'123'會(huì)被轉(zhuǎn)為整數(shù),導(dǎo)致'007'變?yōu)?,丟失格式,可通過(guò)添加前綴避免。 4.函數(shù)參數(shù)

在PHP應(yīng)用中揭開(kāi)浮點(diǎn)數(shù)不準(zhǔn)確的神秘面紗 在PHP應(yīng)用中揭開(kāi)浮點(diǎn)數(shù)不準(zhǔn)確的神秘面紗 Jul 26, 2025 am 09:41 AM

浮點(diǎn)數(shù)不準(zhǔn)確的問(wèn)題在PHP中常見(jiàn),尤其是在金融計(jì)算或精確比較時(shí),根本原因是十進(jìn)制小數(shù)無(wú)法在二進(jìn)制浮點(diǎn)表示法(IEEE754標(biāo)準(zhǔn))中精確存儲(chǔ),導(dǎo)致如0.1 0.2≠0.3的結(jié)果;1.進(jìn)行浮點(diǎn)數(shù)相等比較時(shí)應(yīng)使用容差值(epsilon)而非直接用==;2.金融計(jì)算應(yīng)避免使用浮點(diǎn)數(shù),改用整數(shù)(如以分為單位)或BCMath擴(kuò)展;3.BCMath通過(guò)字符串進(jìn)行任意精度計(jì)算,適用於高精度場(chǎng)景,但性能較低;4.應(yīng)注意PHP的類型轉(zhuǎn)換可能將字符串或整數(shù)隱式轉(zhuǎn)為浮點(diǎn)數(shù)引入誤差;總之,浮點(diǎn)數(shù)不精確是通用計(jì)算問(wèn)題,但在

整數(shù)劃分深度潛水:了解``intdiv() 整數(shù)劃分深度潛水:了解``intdiv() Jul 27, 2025 am 12:19 AM

intdiv()performstrueintegerdivisionandissaferforwholenumbers,whilecasting(int)afterdivisionrisksfloating-pointprecisionerrors.2.Bothtruncatetowardzero,butcastingcanyieldincorrectresultswithnegativeorimprecisevaluesduetofloatrepresentationissues.3.int

See all articles