Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
°²È«ÐÔ²âÊÔ--CSRF¹¥»÷
 
×÷Õߣºkazhang, À´Ô´£º51CTO ·¢²¼ÓÚ 2015-8-12
  4629  次浏览      49
 

Ò».CSRFÊÇʲô£¿

CSRF£¨Cross-site request forgery£©£¬ÖÐÎÄÃû³Æ£º¿çÕ¾ÇëÇóαÔ죬Ҳ±»³ÆÎª£ºone click attack/session riding£¬ËõдΪ£ºCSRF/XSRF¡£

¶þ.CSRF¿ÉÒÔ×öʲô£¿

ÄãÕâ¿ÉÒÔÕâôÀí½âCSRF¹¥»÷£º¹¥»÷ÕßµÁÓÃÁËÄãµÄÉí·Ý£¬ÒÔÄãµÄÃûÒå·¢ËͶñÒâÇëÇó¡£CSRFÄܹ»×öµÄÊÂÇé°üÀ¨£ºÒÔÄãÃûÒå·¢ËÍÓʼþ£¬·¢ÏûÏ¢£¬µÁÈ¡ÄãµÄÕ˺ţ¬ÉõÖÁÓÚ**ÉÌÆ·£¬ÐéÄâ»õ±ÒתÕË......Ôì³ÉµÄÎÊÌâ°üÀ¨£º¸öÈËÒþ˽й¶ÒÔ¼°²Æ²ú°²È«¡£

Èý.CSRF©¶´ÏÖ×´

CSRFÕâÖÖ¹¥»÷·½Ê½ÔÚ2000ÄêÒѾ­±»¹úÍâµÄ°²È«ÈËÔ±Ìá³ö£¬µ«ÔÚ¹úÄÚ£¬Ö±µ½06Äê²Å¿ªÊ¼±»¹Ø×¢£¬08Ä꣬¹úÄÚÍâµÄ¶à¸ö´óÐÍ**ºÍ½»»¥ÍøÕ¾·Ö±ð±¬³öCSRF©¶´£¬È磺NYTimes.com£¨Å¦Ô¼Ê±±¨£©¡¢Metafilter£¨Ò»¸ö´óÐ͵ÄBLOGÍøÕ¾£©£¬YouTubeºÍ°Ù¶ÈHI......¶øÏÖÔÚ£¬»¥ÁªÍøÉϵÄÐí¶àÕ¾µãÈԶԴ˺ÁÎÞ·À±¸£¬ÒÔÖÁÓÚ°²È«Òµ½ç³ÆCSRFΪ¡°³Á˯µÄ¾ÞÈË¡±¡£

ËÄ.CSRFµÄÔ­Àí

ÏÂͼ¼òµ¥²ûÊöÁËCSRF¹¥»÷µÄ˼Ï룺

´ÓÉÏͼ¿ÉÒÔ¿´³ö£¬ÒªÍê³ÉÒ»´ÎCSRF¹¥»÷£¬Êܺ¦Õß±ØÐëÒÀ´ÎÍê³ÉÁ½¸ö²½Ö裺

1.µÇ¼ÊÜÐÅÈÎÍøÕ¾A£¬²¢ÔÚ±¾µØÉú³ÉCookie¡£

2.ÔÚ²»µÇ³öAµÄÇé¿öÏ£¬·ÃÎÊΣÏÕÍøÕ¾B¡£

¿´µ½ÕâÀÄãÒ²Ðí»á˵£º¡°Èç¹ûÎÒ²»Âú×ãÒÔÉÏÁ½¸öÌõ¼þÖеÄÒ»¸ö£¬ÎҾͲ»»áÊܵ½CSRFµÄ¹¥»÷¡±¡£Êǵģ¬È·ÊµÈç´Ë£¬µ«Äã²»Äܱ£Ö¤ÒÔÏÂÇé¿ö²»»á·¢Éú£º

1.Äã²»Äܱ£Ö¤ÄãµÇ¼ÁËÒ»¸öÍøÕ¾ºó£¬²»ÔÙ´ò¿ªÒ»¸ötabÒ³Ãæ²¢·ÃÎÊÁíÍâµÄÍøÕ¾¡£

2.Äã²»Äܱ£Ö¤Äã¹Ø±Õä¯ÀÀÆ÷Á˺ó£¬Äã±¾µØµÄCookieÁ¢¿Ì¹ýÆÚ£¬ÄãÉϴεĻỰÒѾ­½áÊø¡££¨ÊÂʵÉÏ£¬¹Ø±Õä¯ÀÀÆ÷²»ÄܽáÊøÒ»¸ö»á»°£¬µ«´ó¶àÊýÈ˶¼»á´íÎóµÄÈÏΪ¹Ø±Õä¯ÀÀÆ÷¾ÍµÈÓÚÍ˳öµÇ¼/½áÊø»á»°ÁË......£©

3.ÉÏͼÖÐËùνµÄ¹¥»÷ÍøÕ¾£¬¿ÉÄÜÊÇÒ»¸ö´æÔÚÆäËû©¶´µÄ¿ÉÐÅÈεľ­³£±»ÈË·ÃÎʵÄÍøÕ¾¡£

ÉÏÃæ´ó¸ÅµØ½²ÁËÒ»ÏÂCSRF¹¥»÷µÄ˼Ï룬ÏÂÃæÎÒ½«Óü¸¸öÀý×ÓÏêϸ˵˵¾ßÌåµÄCSRF¹¥»÷£¬ÕâÀïÎÒÒÔÒ»¸öÒøÐÐתÕ˵IJÙ×÷×÷ΪÀý×Ó£¨½ö½öÊÇÀý×Ó£¬ÕæÊµµÄÒøÐÐÍøÕ¾Ã»Õâôɵ:>£©

ʾÀý1£º

ÒøÐÐÍøÕ¾A£¬ËüÒÔGETÇëÇóÀ´Íê³ÉÒøÐÐתÕ˵IJÙ×÷£¬È磺http://www.mybank.com/Transfer.php?toBankId=11&money=1000

ΣÏÕÍøÕ¾B£¬ËüÀïÃæÓÐÒ»¶ÎHTMLµÄ´úÂëÈçÏ£º

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

Ê×ÏÈ£¬ÄãµÇ¼ÁËÒøÐÐÍøÕ¾A£¬È»ºó·ÃÎÊΣÏÕÍøÕ¾B£¬àÞ£¬ÕâʱÄã»á·¢ÏÖÄãµÄÒøÐÐÕË»§ÉÙÁË1000¿é......

Ϊʲô»áÕâÑùÄØ£¿Ô­ÒòÊÇÒøÐÐÍøÕ¾AÎ¥·´ÁËHTTP¹æ·¶£¬Ê¹ÓÃGETÇëÇó¸üÐÂ×ÊÔ´¡£ÔÚ·ÃÎÊΣÏÕÍøÕ¾BµÄ֮ǰ£¬ÄãÒѾ­µÇ¼ÁËÒøÐÐÍøÕ¾A£¬¶øBÖеÄ<img>ÒÔGETµÄ·½Ê½ÇëÇóµÚÈý·½×ÊÔ´£¨ÕâÀïµÄµÚÈý·½¾ÍÊÇÖ¸ÒøÐÐÍøÕ¾ÁË£¬Ô­±¾ÕâÊÇÒ»¸öºÏ·¨µÄÇëÇ󣬵«ÕâÀï±»²»·¨·Ö×ÓÀûÓÃÁË£©£¬ËùÒÔÄãµÄä¯ÀÀÆ÷»á´øÉÏÄãµÄÒøÐÐÍøÕ¾AµÄCookie·¢³öGetÇëÇó£¬È¥»ñÈ¡×ÊÔ´¡°http://www.mybank.com/Transfer.php?toBankId=11&money=1000¡±£¬½á¹ûÒøÐÐÍøÕ¾·þÎñÆ÷ÊÕµ½ÇëÇóºó£¬ÈÏΪÕâÊÇÒ»¸ö¸üÐÂ×ÊÔ´²Ù×÷£¨×ªÕ˲Ù×÷£©£¬ËùÒÔ¾ÍÁ¢¿Ì½øÐÐתÕ˲Ù×÷......

ʾÀý2£º

ΪÁ˶žøÉÏÃæµÄÎÊÌâ£¬ÒøÐоö¶¨¸ÄÓÃPOSTÇëÇóÍê³ÉתÕ˲Ù×÷¡£

ÒøÐÐÍøÕ¾AµÄWEB±íµ¥ÈçÏ£º

<form action="Transfer.php" method="POST">
¡¡¡¡¡¡¡¡<p>ToBankId: <input type="text" name="toBankId" /></p>
¡¡¡¡¡¡¡¡<p>Money: <input type="text" name="money" /></p>
¡¡¡¡¡¡¡¡<p><input type="submit" value="Transfer" /></p>
¡¡¡¡</form>

ºǫ́´¦ÀíÒ³ÃæTransfer.phpÈçÏ£º

<?php
¡¡¡¡¡¡¡¡session_start();
¡¡¡¡¡¡¡¡if (isset($_REQUEST['toBankId'] &&¡¡isset($_REQUEST['money']))
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡ buy_stocks($_REQUEST['toBankId'],¡¡$_REQUEST['money']);
¡¡¡¡¡¡¡¡}
¡¡¡¡?>

ΣÏÕÍøÕ¾B£¬ÈÔȻֻÊǰüº¬ÄǾäHTML´úÂ룺

<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

ºÍʾÀý1ÖеIJÙ×÷Ò»Ñù£¬ÄãÊ×ÏȵǼÁËÒøÐÐÍøÕ¾A£¬È»ºó·ÃÎÊΣÏÕÍøÕ¾B£¬½á¹û.....ºÍʾÀý1Ò»Ñù£¬ÄãÔÙ´ÎûÁË1000¿é¡«T_T£¬Õâ´ÎʹʵÄÔ­ÒòÊÇ£ºÒøÐкǫ́ʹÓÃÁË$_REQUESTÈ¥»ñÈ¡ÇëÇóµÄÊý¾Ý£¬¶ø$_REQUEST¼È¿ÉÒÔ»ñÈ¡GETÇëÇóµÄÊý¾Ý£¬Ò²¿ÉÒÔ»ñÈ¡POSTÇëÇóµÄÊý¾Ý£¬Õâ¾ÍÔì³ÉÁËÔÚºǫ́´¦Àí³ÌÐòÎÞ·¨Çø·ÖÕâµ½µ×ÊÇGETÇëÇóµÄÊý¾Ý»¹ÊÇPOSTÇëÇóµÄÊý¾Ý¡£ÔÚPHPÖУ¬¿ÉÒÔʹÓÃ$_GETºÍ$_POST·Ö±ð»ñÈ¡GETÇëÇóºÍPOSTÇëÇóµÄÊý¾Ý¡£ÔÚJAVAÖУ¬ÓÃÓÚ»ñÈ¡ÇëÇóÊý¾ÝrequestÒ»Ñù´æÔÚ²»ÄÜÇø·ÖGETÇëÇóÊý¾ÝºÍPOSTÊý¾ÝµÄÎÊÌâ¡£

ʾÀý3£º

¾­¹ýÇ°Ãæ2¸ö²ÒÍ´µÄ½Ìѵ£¬ÒøÐоö¶¨°Ñ»ñÈ¡ÇëÇóÊý¾ÝµÄ·½·¨Ò²¸ÄÁË£¬¸ÄÓÃ$_POST£¬Ö»»ñÈ¡POSTÇëÇóµÄÊý¾Ý£¬ºǫ́´¦ÀíÒ³ÃæTransfer.php´úÂëÈçÏ£º

<?php
¡¡¡¡¡¡¡¡session_start();
¡¡¡¡¡¡¡¡if (isset($_POST['toBankId'] &&¡¡isset($_POST['money']))
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡ buy_stocks($_POST['toBankId'],¡¡$_POST['money']);
¡¡¡¡¡¡¡¡}
¡¡¡¡?>

È»¶ø£¬Î£ÏÕÍøÕ¾BÓëʱ¾ã½ø£¬Ëü¸ÄÁËһϴúÂ룺

<html>
¡¡¡¡<head>
¡¡¡¡¡¡¡¡<script type="text/javascript">
¡¡¡¡¡¡¡¡¡¡¡¡function steal()
¡¡¡¡¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡ iframe = document.frames["steal"];
¡¡¡¡ ¡¡¡¡ iframe.document.Submit("transfer");
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡</script>
¡¡¡¡</head>

<body onload="steal()">
¡¡¡¡¡¡¡¡<iframe name="steal" display="none">
¡¡¡¡¡¡¡¡¡¡¡¡<form method="POST" name="transfer"¡¡action="http://www.myBank.com/Transfer.php">
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<input type="hidden" name="toBankId" value="11">
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡<input type="hidden" name="money" value="1000">
¡¡¡¡¡¡¡¡¡¡¡¡</form>
¡¡¡¡¡¡¡¡</iframe>
¡¡¡¡</body>
</html>

Èç¹ûÓû§ÈÔÊǼÌÐøÉÏÃæµÄ²Ù×÷£¬ºÜ²»ÐÒ£¬½á¹û½«»áÊÇÔٴβ»¼û1000¿é......ÒòΪÕâÀïΣÏÕÍøÕ¾B°µµØÀï·¢ËÍÁËPOSTÇëÇóµ½ÒøÐÐ!

×ܽáÒ»ÏÂÉÏÃæ3¸öÀý×Ó£¬CSRFÖ÷ÒªµÄ¹¥»÷ģʽ»ù±¾ÉÏÊÇÒÔÉϵÄ3ÖÖ£¬ÆäÖÐÒÔµÚ1,2ÖÖ×îΪÑÏÖØ£¬ÒòΪ´¥·¢Ìõ¼þºÜ¼òµ¥£¬Ò»¸ö<img>¾Í¿ÉÒÔÁË£¬¶øµÚ3ÖֱȽÏÂé·³£¬ÐèҪʹÓÃJavaScript£¬ËùÒÔʹÓõĻú»á»á±ÈÇ°ÃæµÄÉٺܶ࣬µ«ÎÞÂÛÊÇÄÄÖÖÇé¿ö£¬Ö»Òª´¥·¢ÁËCSRF¹¥»÷£¬ºó¹û¶¼ÓпÉÄܺÜÑÏÖØ¡£

Àí½âÉÏÃæµÄ3ÖÖ¹¥»÷ģʽ£¬Æäʵ¿ÉÒÔ¿´³ö£¬CSRF¹¥»÷ÊÇÔ´ÓÚWEBµÄÒþʽÉí·ÝÑéÖ¤»úÖÆ£¡WEBµÄÉí·ÝÑéÖ¤»úÖÆËäÈ»¿ÉÒÔ±£Ö¤Ò»¸öÇëÇóÊÇÀ´×ÔÓÚij¸öÓû§µÄä¯ÀÀÆ÷£¬µ«È´ÎÞ·¨±£Ö¤¸ÃÇëÇóÊÇÓû§Åú×¼·¢Ë͵ģ¡

Îå.CSRFµÄ·ÀÓù

ÎÒ×ܽáÁËһϿ´µ½µÄ×ÊÁÏ£¬CSRFµÄ·ÀÓù¿ÉÒÔ´Ó·þÎñ¶ËºÍ¿Í»§¶ËÁ½·½Ãæ×ÅÊÖ£¬·ÀÓùЧ¹ûÊÇ´Ó·þÎñ¶Ë×ÅÊÖЧ¹û±È½ÏºÃ£¬ÏÖÔÚÒ»°ãµÄCSRF·ÀÓùÒ²¶¼ÔÚ·þÎñ¶Ë½øÐС£

1.·þÎñ¶Ë½øÐÐCSRF·ÀÓù

·þÎñ¶ËµÄCSRF·½Ê½·½·¨ºÜ¶àÑù£¬µ«×ܵÄ˼Ïë¶¼ÊÇÒ»Öµģ¬¾ÍÊÇÔÚ¿Í»§¶ËÒ³ÃæÔö¼ÓÎ±Ëæ»úÊý¡£

(1).Cookie Hashing(ËùÓÐ±íµ¥¶¼°üº¬Í¬Ò»¸öÎ±Ëæ»úÖµ)£º

Õâ¿ÉÄÜÊÇ×î¼òµ¥µÄ½â¾ö·½°¸ÁË£¬ÒòΪ¹¥»÷Õß²»ÄÜ»ñµÃµÚÈý·½µÄCookie(ÀíÂÛÉÏ)£¬ËùÒÔ±íµ¥ÖеÄÊý¾ÝÒ²¾Í¹¹Ôìʧ°ÜÁË:>

<?php
¡¡¡¡¡¡¡¡//¹¹Ôì¼ÓÃܵÄCookieÐÅÏ¢
¡¡¡¡¡¡¡¡$value = ¡°DefenseSCRF¡±;
¡¡¡¡¡¡¡¡setcookie(¡±cookie¡±, $value, time()+3600);
¡¡¡¡?>

ÔÚ±íµ¥ÀïÔö¼ÓHashÖµ£¬ÒÔÈÏÖ¤ÕâȷʵÊÇÓû§·¢Ë͵ÄÇëÇó¡£

<?php
¡¡¡¡¡¡¡¡$hash = md5($_COOKIE['cookie']);
¡¡¡¡?>
¡¡¡¡<form method=¡±POST¡± action=¡±transfer.php¡±>
¡¡¡¡¡¡¡¡<input type=¡±text¡± name=¡±toBankId¡±>
¡¡¡¡¡¡¡¡<input type=¡±text¡± name=¡±money¡±>
¡¡¡¡¡¡¡¡<input type=¡±hidden¡± name=¡±hash¡± value=¡±<?=$hash;?>¡±>
¡¡¡¡¡¡¡¡<input type=¡±submit¡± name=¡±submit¡± value=¡±Submit¡±>
¡¡¡¡</form>

È»ºóÔÚ·þÎñÆ÷¶Ë½øÐÐHashÖµÑéÖ¤

<?php
¡¡¡¡ if(isset($_POST['check'])) {
¡¡¡¡ $hash = md5($_COOKIE['cookie']);
¡¡¡¡ if($_POST['check'] == $hash) {
¡¡¡¡ doJob();
¡¡¡¡ } else {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//...
¡¡¡¡ }
¡¡¡¡ } else {
¡¡¡¡¡¡¡¡¡¡¡¡//...
¡¡¡¡ }
?>

Õâ¸ö·½·¨¸öÈ˾õµÃÒѾ­¿ÉÒԶžø99%µÄCSRF¹¥»÷ÁË£¬ÄÇ»¹ÓÐ1%ÄØ....ÓÉÓÚÓû§µÄCookieºÜÈÝÒ×ÓÉÓÚÍøÕ¾µÄXSS©¶´¶ø±»µÁÈ¡£¬Õâ¾ÍÁíÍâµÄ1%¡£Ò»°ãµÄ¹¥»÷Õß¿´µ½ÓÐÐèÒªËãHashÖµ£¬»ù±¾¶¼»á·ÅÆúÁË£¬Ä³Ð©³ýÍ⣬ËùÒÔÈç¹ûÐèÒª100%µÄ¶Å¾ø£¬Õâ¸ö²»ÊÇ×îºÃµÄ·½·¨¡£

(2).ÑéÖ¤Âë

Õâ¸ö·½°¸µÄ˼·ÊÇ£ºÃ¿´ÎµÄÓû§Ìá½»¶¼ÐèÒªÓû§ÔÚ±íµ¥ÖÐÌîдһ¸öͼƬÉϵÄËæ»ú×Ö·û´®£¬¶ò....Õâ¸ö·½°¸¿ÉÒÔÍêÈ«½â¾öCSRF£¬µ«¸öÈ˾õµÃÔÚÒ×ÓÃÐÔ·½ÃæËƺõ²»ÊÇÌ«ºÃ£¬»¹ÓÐÌýÎÅÊÇÑéÖ¤ÂëͼƬµÄʹÓÃÉæ¼°ÁËÒ»¸ö±»³ÆÎªMHTMLµÄBug£¬¿ÉÄÜÔÚijЩ°æ±¾µÄ΢ÈíIEÖÐÊÜÓ°Ïì¡£

(3).One-Time Tokens(²»Í¬µÄ±íµ¥°üº¬Ò»¸ö²»Í¬µÄÎ±Ëæ»úÖµ)

ÔÚʵÏÖOne-Time Tokensʱ£¬ÐèҪעÒâÒ»µã£º¾ÍÊÇ¡°²¢ÐлỰµÄ¼æÈÝ¡±¡£Èç¹ûÓû§ÔÚÒ»¸öÕ¾µãÉÏͬʱ´ò¿ªÁËÁ½¸ö²»Í¬µÄ±íµ¥£¬CSRF±£»¤´ëÊ©²»Ó¦¸ÃÓ°Ïìµ½Ëû¶ÔÈÎºÎ±íµ¥µÄÌá½»¡£¿¼ÂÇÒ»ÏÂÈç¹ûÿ´Î±íµ¥±»×°ÈëʱվµãÉú³ÉÒ»¸öÎ±Ëæ»úÖµÀ´¸²¸ÇÒÔǰµÄÎ±Ëæ»úÖµ½«»á·¢ÉúʲôÇé¿ö£ºÓû§Ö»Äܳɹ¦µØÌá½»Ëû×îºó´ò¿ªµÄ±íµ¥£¬ÒòΪËùÓÐÆäËûµÄ±íµ¥¶¼º¬ÓзǷ¨µÄÎ±Ëæ»úÖµ¡£±ØÐëСÐIJÙ×÷ÒÔÈ·±£CSRF±£»¤´ëÊ©²»»áÓ°ÏìÑ¡ÏʽµÄä¯ÀÀ»òÕßÀûÓöà¸öä¯ÀÀÆ÷´°¿Úä¯ÀÀÒ»¸öÕ¾µã¡£

ÒÔÏÂÎÒµÄʵÏÖ:

1).ÏÈÊÇÁîÅÆÉú³Éº¯Êý(gen_token())£º

<?php
function gen_token() {
¡¡¡¡¡¡¡¡//ÕâÀïÎÒÊÇ̰·½±ã£¬Êµ¼ÊÉϵ¥Ê¹ÓÃRand()µÃ³öµÄËæ»úÊý×÷ΪÁîÅÆ£¬Ò²ÊDz»°²È«µÄ¡£
¡¡¡¡¡¡¡¡//Õâ¸ö¿ÉÒԲο¼ÎÒдµÄFindbugs±Ê¼ÇÖеġ¶Random object created and used only once¡·
$token = md5(uniqid(rand(), true));
return $token;
}

2).È»ºóÊÇSessionÁîÅÆÉú³Éº¯Êý(gen_stoken())£º

<?php
¡¡¡¡function gen_stoken() {
¡¡¡¡¡¡¡¡¡¡¡¡$pToken = "";
¡¡¡¡¡¡¡¡¡¡¡¡if($_SESSION[STOKEN_NAME] == $pToken){
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//ûÓÐÖµ£¬¸³ÐÂÖµ
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡$_SESSION[STOKEN_NAME] = gen_token();
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡¡¡¡¡else{
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¼ÌÐøÊ¹ÓþɵÄÖµ
¡¡¡¡¡¡¡¡¡¡¡¡}
¡¡¡¡}
?>

3).WEB±íµ¥Éú³ÉÒþ²ØÊäÈëÓòµÄº¯Êý£º

<?php
¡¡¡¡ function gen_input() {
¡¡¡¡ gen_stoken();
¡¡¡¡ echo ¡°<input type=\¡±hidden\¡± name=\¡±" . FTOKEN_NAME . ¡°\¡±
¡¡¡¡ value=\¡±" . $_SESSION[STOKEN_NAME] . ¡°\¡±> ¡°;
¡¡¡¡}
?>

4).WEB±íµ¥½á¹¹£º

<?php
session_start();
include(¡±functions.php¡±);
?>
<form method=¡±POST¡± action=¡±transfer.php¡±>
<input type=¡±text¡± name=¡±toBankId¡±>
<input type=¡±text¡± name=¡±money¡±>
<? gen_input(); ?>
<input type=¡±submit¡± name=¡±submit¡± value=¡±Submit¡±>
</FORM>

5).·þÎñ¶ËºË¶ÔÁîÅÆ£º

Õâ¸öºÜ¼òµ¥£¬ÕâÀï¾Í²»ÔÙ†ªàÂÁË¡£

ÉÏÃæÕâ¸öÆäʵ²»ÍêÈ«·ûºÏ¡°²¢ÐлỰµÄ¼æÈÝ¡±µÄ¹æÔò£¬´ó¼Ò¿ÉÒÔÔÚ´Ë»ù´¡ÉÏÐ޸ġ£

   
4629 ´Îä¯ÀÀ       49
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]

LoadRunnerÐÔÄܲâÊÔ»ù´¡
Èí¼þ²âÊÔ½á¹û·ÖÎöºÍÖÊÁ¿±¨¸æ
ÃæÏò¶ÔÏóÈí¼þ²âÊÔ¼¼ÊõÑо¿
Éè¼Æ²âÊÔÓÃÀýµÄËÄÌõÔ­Ôò
¹¦ÄܲâÊÔÖйÊÕÏÄ£Ð͵Ľ¨Á¢
ÐÔÄܲâÊÔ×ÛÊö

ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
²âÊÔ¹ý³ÌÓëÍŶӹÜÀí
LoadRunner½øÐÐÐÔÄܲâÊÔ
WEBÓ¦ÓõÄÈí¼þ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
°×ºÐ²âÊÔ·½·¨Óë¼¼Êõ

ij²©²ÊÐÐÒµ Êý¾Ý¿â×Ô¶¯»¯²âÊÔ
IT·þÎñÉÌ Web°²È«²âÊÔ
IT·þÎñÉÌ ×Ô¶¯»¯²âÊÔ¿ò¼Ü
º£º½¹É·Ý µ¥Ôª²âÊÔ¡¢Öع¹
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀý·ÖÎö
»¥ÁªÍøweb²âÊÔ·½·¨Óëʵ¼ù
»ùÓÚSeleniumµÄWeb×Ô¶¯»¯²âÊÔ