PHPã§èª°ã§ãç°¡åWebãµã¼ãã¹è£½ä½ï¼ã§ãªããä½ã£ã¦å ¬éãã奴ã¡ãã£ã¨æ¥ã
ã¿ã¤ãã«ã¯åºæ¥ãã°é¢é£ããæ¹ã«èªãã§æ¬²ããã£ãã®ã§ã軽ãé£ãéã«ãã¾ããããã¿ã¾ããã:*)
æè¿ã¯ããã®ãã¦ã£ãããã¼ï¼Twitterï¼ã§ãããããââã£ãã¼ãã¿ãããªãµã¼ãã¹ãã°ãã°ãç»å ´ãã¦ã¾ããï¼
ãããã§ã¾ãã¾ããã¤ãã¿ã¼ãé¢ç½ãæãã«ãªã£ã¦ã¦ãããæµãã§ããï¼
ã§ã・・・ã¡ãã£ã¨æ°ã«ãªããã¨ã・・・
æè¿ãããããã°ã©ãã«ã¯é ¼ããªãï¼ç°¡åããã°ã©ãã³ã°ï¼ãã ã¨ã・・・ ãPHPã§èª°ã§ãç°¡åWebãµã¼ãã¹ä½æï¼ãã ã¨ã・・・
ã¯ã¦ãªããã¯ãã¼ã¯ã®ãããã³ããªã§è¦ããã¾ããã・・・
ããã°ã©ãã³ã°ãã人ãå¢ããã®ã¯ç´ æµã§ãï¼ã¬ããï½¥ããã°ã©ãã³ã°ãªãï¼ ãªãã§ããã©ï½¥ï½¥ï½¥
ã¡ããã¨ã»ãã¥ãªãã£ã®ãã¨èãã¦ã¾ãã・・・ï¼ï¼
ãã»ãã¥ãªãã£å¯¾çã¨ãé£ãããé¢åããã¼ãã俺ã®é©å½ã«ä½ã£ããµã¼ãã¹ã¨ãã©ããªã£ã¦ãã¤ã¤ãï½ï½ã
ãããã§ããããã§ãï¼ å¥ã«ããæã£ã¦ããªãã©ãã§ããããã§ãï¼
ã§ããããªããã°ã©ã ãWebä¸ã§å ¬éãããããã¼ããã±ã¨ã
ä½ã£ãããªãã¯ã©ãã§ãè¯ãã¦ããç¥ããã«ä½¿ã£ãã¦ã¼ã¶ã¼ãããäºä»¶ã«å·»ãè¾¼ã¾ãããã§ããã
宿ã«ä½ã£ãããã åãã ãã®ããã°ã©ã ãã¦ã¼ã¶ã¼ããã¯ä¿¡ç¨ãã¦å©ç¨ããããã§ãã
ãããå°ãã§ããããèãã¦æ¬²ããã
1.XSSã£ã¦ããã®ããããï¼
ã¾ããã¡ããã©ãã«ã§ããã£ã¦ã¯ãããªããã©ã¼ã ã§ãã
<form action="/test.php" method="get"> IDãããã¦ãâ : <input type="text" name="id" size="30"> <input type="submit" value="éä¿¡â"> </form> <?php // ãã©ã¼ã ã§ååãéä¿¡ããã¦ãããååãè¡¨ç¤ºï¼ if($_GET['id']!=NULL) { echo "<p>ããããï¼ ".$_GET['id']."ããï¼ï¼</p>"; } ?>
ãMolokheiyaãã¨å ¥åãã¦éä¿¡ããã¨ããããããMolokheiyaãããã¨åºãã ãã®ç°¡åãªããã°ã©ã ã§ãããHello Worldï¼
ã§ãããã«ãããã¨å ¥åãã¦éä¿¡ããã・・・ï¼
ãªãªãªããªããåºãï¼ï¼
ãã©ã¼ã ã«å ¥åããHTMLã¨ãJavaScriptãããã®ã¾ã¾å®è¡ã§ãã¡ãã・・・ï¼ï¼
・・・ã£ã¦ãã¨ã¯ãæªè³ªãªã¦ã¤ã«ã¹ãä»è¾¼ãã ãã¼ã¸ã«é£ã°ãããããã£ã¡ããµã¤ãããã¬ã¼ã ã§åãè¾¼ãã ããã°ããã¹ã¯ãªç»åã表示ãããã¨ããç°¡åã«åºæ¥ã¾ããï¼
ããå°ã工夫ããã°é©å½ãªãµã¤ãããã¬ã¼ã ã§è¡¨ç¤ºããã¦ãOKãã¿ã³ã ããè¦ããããã«ä½ç½®èª¿ç¯ãããã¦OKãã¦ã¼ã¶ã¼ã«æ°ã¥ãããªãã¾ã¾æ¼ããã・・・ã¨ããåºæ¥ãããªï¼
ãããªãã¨ãªãã£ã¦è¨ããã©ãã¤ãã£ãã¼ã§ã¿ããªãã£ã¦ãï¼ ã£ã¦å å ¥è¦³ãããç¶æ ã§ãOKãæ¼ãã¦ä¸ãããã£ã¦åºãããã¿ããªãã£ã¦ãå®å¿æã§æ¼ãã¡ãã£ã¦ããããããªãã¨æããªï¼
ããã«æãããã®ã¯ããã°ã¤ã³æ©è½ã¨ããããã¨ããã°ã¤ã³ç¶æ ã®ä¹ã£åããåºæ¥ãã£ã¦ãã¨ããªï½¥ï½¥ï½¥
ãã¡ãããããã»ãã¥ãªãã£çã«åå¨ãã¦ã¯ãããªãããã°ã©ã ã
<form action="/test.php" method="get"> IDãããã¦ãâ : <input type="text" name="id" size="30"> <input type="submit" value="éä¿¡â"> </form> <?php session_start(); // ã»ãã·ã§ã³ã使ãã // ãã©ã¼ã ã§ååãéä¿¡ããã¦ãããã»ãã·ã§ã³ã«ç»é²ï¼ if($_GET['id']!=NULL) { $_SESSION['name']=$_GET['id']; } // ã»ãã·ã§ã³ãnameãã«ãã¼ã¿ããã£ããããããè¡¨ç¤ºï¼ if($_SESSION['name']!=NULL) { echo "<p>ããããï¼ ".$_SESSION['name']."ããï¼ï¼</p>"; } // 夿°ã®ä¸èº«ãæ¸ãåºãã¦ã¿ã echo "GET['id'] : {$_GET['id']}"; echo "<br>"; echo "SESSION['name'] : {$_SESSION['name']}"; ?>
PHPã®ä¾¿å©æ©è½ãã»ãã·ã§ã³ããã¡ãã¡ã®æåãµã¤ãã§ãããã°ã¤ã³ç®¡çã«ä½¿ããã¦ã¾ããï¼
ã§ãä½¿ãæ¹ã誤ãã¨å¤§å¤ãªãã¨ã«ï½¥ï½¥ï½¥ï¼
æåãã¼ã¸ã表示ããã¨ãGETãSESSIONããã¼ã¿ããªãã®ã§ã«ã©ããã§ãã
ãã£ãã¨åãããã«IDãå
¥ãã¦éä¿¡ãã¾ãã
ããã¨ã$_SESSION['name']=$_GET['id'];ãã§ãIDãã»ãã·ã§ã³ã®ä¸ã«è¨é²ããã¾ããã
ä¸åº¦ã»ãã·ã§ã³ã«è¨é²ãããã¨ãã»ãã·ã§ã³ãåããã¾ã§ãã£ã¨ãã¼ã¿ãæ®ãï¼
ãããã»ãã·ã§ã³å´ã®ãã¼ã¿ã¯ãµã¼ãã¼ã«ä¿åãããã®ã§ãã·ã¹ãã ã§ä½¿ããã©ã¡ã¼ã¿ã¨ããæ¯è¼çå®å
¨ã«ä¿åãã¦ãããã®ã§ãã
ã ããããã°ã¤ã³ç¶æ
ãªã©ã¯ã»ãã·ã§ã³ã§ç®¡çããããã§ããã
ãã®ã»ãã·ã§ã³ã¯ããµã¼ãã¼å´ã®ãã¼ã¿ã¨ãã©ã¦ã¶ãç¹ãã®ã«ãã»ãã·ã§ã³IDããã¯ããã¼ã§ä¿åãã¦ãã¾ãã
åæç¶æ ã ã¨ããPHPSESSIDãã¨ããååã«ãªãã¾ãããã®ä¸ã®è±æ°åãããµã¼ãã¼å´ã®ãã¼ã¿ãå¼ãåºããã¼ã§ãã
・・・ãããã³ã¨æ¥ã¡ããã¾ãããï¼
è¦ã¯ã»ãã·ã§ã³IDãã²ããåºæ¥ãã°ããã¹ã¯ã¼ããIDãç¥ããªãã¦ããã°ã¤ã³ç¶æ ãå¼ãç¶ãï¼ä¹ã£åãï¼ãã¨ãåºæ¥ããã§ããï¼
ãããã»ãã·ã§ã³ãã¤ã¸ã£ãã¯ã¨è¨ãã¾ãã
ãã¦ããã£ãã¯ãalert(1);ããå ¥ãã¾ããããããã«ãalert(document.cookie);ããå ¥ããã¨ã©ããªãã®ã§ãããï¼ï¼
æ¬å½ã«æãããã§ããã
対ç
夿°ãæ¸ãåºãæã¯ãå¿ ãã¨ã¹ã±ã¼ããè¡ãã¾ãããã
é常ã«ç°¡åãªå¯¾å¦ã§ãã»ã¨ãã©ã®æ»æã黿¢ã§ããããã«ãªãã¾ãã
<form action="/test.php" method="get"> IDãããã¦ãâ : <input type="text" name="id" size="30"> <input type="submit" value="éä¿¡â"> </form> <?php // ãã©ã¼ã ã§ååãéä¿¡ããã¦ãããååãè¡¨ç¤ºï¼ if($_GET['id']!=NULL) { echo "<p>ããããï¼ ".h($_GET['id'])."ããï¼ï¼</p>"; } function h($str) { // XSSå¯¾å¦ return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); }
å
¨ã¦ã®å¤æ°ã®HTMLæ¸ãåºãã«ã¯ãhtmlspecialcharsããéãã¾ãã
2/20 11:50 追è¨
<form action="<?=$_SERVER['PHP_SELF']?>" method="get">å®ã¯ããã«ãXSSã®èå¼±æ§ãå«ã¾ãã¦ãã¾ããæ¬¡ã®ãããªURLã§ã¢ã¯ã»ã¹ãããå ´åãä»»æã®ã¹ã¯ãªãããå®è¡ãããã¨ãåºæ¥ã¾ãã
http://www.example.jp/ example.php/%22%3E%3Cscript%3Ealert(document.cookie);%3C/script%3Eããã¯ãã¿å ã§å¯¾çæ¹æ³ã¨ãã¦ã夿°ãæ¸ãåºãæã¯ãå¿ ãã¨ã¹ã±ã¼ããè¡ãã¾ãããããã¨æ¸ããªãã$_SERVER['PHP_SELF']ãã¨ã¹ã±ã¼ããã¦ããªãã®ãåå ã§ãããã
ï¼æ³¨æï¼æè¿ã§ã¯ãã®ãããªã¹ã¯ãªããã¯ãã©ã¦ã¶ããããã¯ãã¦ãããã®ã§ãããIE6ã¨ãå¤ããã©ã¦ã¶ãããã¾ãããï¼
Re:PHPで誰でも簡単Webサービス製作!でなんか作って公開した奴ちょっと来い - to-R
ã¨ã®ãã¨ã§ãããææãããã¨ããããã¾ããï¼ï¼
ãªãç¾å¨ã¯å¯¾çããã³ã¼ãã«ãã¦ããã¾ãããã¿ã¾ããï¼
第3弿°ã®æåã³ã¼ãã¯é©å夿´ãã¦ä¸ããã
ããã§ã¯é·ããªãã®ã§çç¥ãã¾ãããã»ãã·ã§ã³ãã¤ã¸ã£ãã¯ã¸ã®å¯¾ç㯠session_regenerate_id(true); çãããã¾ãã
ãã¨æ¬¡åãããã°ã¤ã³ãçç¥ãããããã¨ãã£ã¦ãã¯ããã¼ã®ä¿åæéãå»¶ã°ãã¦ã¯ããã¾ããã
èªåãã°ã¤ã³ã¯ãèªåãã°ã¤ã³ç¨ã®ã¯ããã¼ãçºè¡ãã¦è¡ãã¾ãããã
ã¯ããã¼ã«ä¿åããæ å ±ã¯åºæ¥ãã ãã©ã³ãã ãªå¤ã«ãªãããã«ãã¾ãã
ã¦ã¼ã¶ã¼åããã¹ã¯ã¼ããããã·ã¥ã«ãããã®ãä¿åãã¦èªè¨¼ããã®ã¯ããã¾ãè¯ãã¨ã¯è¨ãã¾ããã詳細はこちらãèªãã§ãã ããã
2.SQLã¤ã³ã¸ã§ã¯ã·ã§ã³ã£ã¦ããã®ããããï¼
çããSQL使ã£ã¦ã¾ããï¼
ãããããã¼ã¿ãå¹ççã«ç®¡çãã¦ããããã¼ã¿ãã¼ã¹ã¯ãããã¶ãç´ æµã§ãããã
ç§ã¯MySQLã¨ã好ãã§ãï¼
ã¨ãããã¨ã§ãã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ããä¿åãããã¼ã¿ãã¼ã¹ãç¨æãã¦ã¿ã¾ãããï¼
ã¾ãé©å½ã«ãã¼ãã«ãä½ã£ã¦ã¿ã¾ããã
mysql> desc user; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | userid | varchar(30) | NO | UNI | | | | password | varchar(50) | NO | | | | +----------+-------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec)
ãidããé£çªããuseridãã30æåã¾ã§ã®ã¦ã¼ã¶ã¼IDããpasswordãããã¹ã¯ã¼ãã¨ããåç´æ§é ã§ãï¼
ããã¦ãã¹ããã¼ã¿ããã¤ã£ã¨å
¥ãã¾ãã
mysql> SELECT * FROM user; +----+------------+----------+ | id | userid | password | +----+------------+----------+ | 1 | hoge | hagehoge | | 2 | foo | gaybarrr | | 3 | Molokheiya | 1231233 | | 4 | bar | hugahugo | +----+------------+----------+ 4 rows in set (0.00 sec)
ã¡ãªã¿ã«ãã®æç¹ã§æ¢ã«è«å¤ã§ãã
ã¦ã¼ã¶ã¼åã¨ãã¹ã¯ã¼ãã§ãã°ã¤ã³èªè¨¼ãããã¨ãã¾ãããï¼
ãããããPHPã§ããããã®ãåºæ¥ããã¨æãã¾ãã
ãããåå¨ããã¯ãã®ãªãããã°ã©ã ã§ããã
<form action="/test.php" method="post"> IDãããã¦ãâ : <input type="text" name="id" size="20"><br> PWãããã¦ãâ : <input type="password" name="pass" size="10"><br> <input type="submit" value="éä¿¡â"> </form> <?php if($_POST['id']!=NULL) { if($db=mysql_connect('localhost','molo_sql','sqlpassword') or die("æ¥ç¶ãã£ã±ãï¼")) { mysql_select_db('molo_sql',$db); // ãã¼ã¿ãã¼ã¹ã鏿 mysql_query("SET NAMES utf8"); // æåã³ã¼ããUTF-8ã«ãã¦ãæ¥æ¬èªãæååãããªãããã« } $name=$_POST['id']; $pass=$_POST['pass']; $sql="SELECT * FROM user WHERE userid = '{$name}' AND password = '{$pass}';"; $result=mysql_query($sql); // SQLãå®è¡ // è¡æ°ãã¼ããªããã¹ã¯ã¼ããéãï¼ ããèªè¨¼å¤±æ if(mysql_num_rows($result)==0) { echo "ã¦ã¼ã¶ã¼åããã¹ã¯ã¼ããéããï¼ï¼"; } else { // èªè¨¼æåï¼ $row=mysql_fetch_assoc($result); echo "<span style=\"color:red;\">ããããï¼".h($row['userid'])."ããï¼</span>"; } } function h($str) { // XSSå¯¾å¦ return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); } ?>
ããã§ã¦ã¼ã¶ã¼IDã«ãMolokheiyaãããã¹ã¯ã¼ãã«ã1231233ãã¨å
¥åãã¦å®è¡ï¼
æåããã¨ããããªãã¾ãï¼ ãã£ããï¼
ãã®æã®SQLã¯
mysql> SELECT * FROM user WHERE userid = 'Molokheiya' AND password = '1231233'; +----+------------+----------+ | id | userid | password | +----+------------+----------+ | 3 | Molokheiya | 1231233 | +----+------------+----------+ 1 row in set (0.00 sec)
ã§ãããããªåãã¦ãããã¨ãåããã¾ãï¼
・・・ãã¦ãã§ã¯ã¦ã¼ã¶ã¼IDã«ã0ãããã¹ã¯ã¼ãã«ã' OR '1' = '1ãã¨å ¥åãã¦å®è¡ããã¨ãä¸ä½ã©ããªãã®ã§ãããã
hogeããã¨ãã¦ãã°ã¤ã³åºæ¥ã¾ããã
ãã®æã®SQLã¯
mysql> SELECT * FROM user WHERE userid = '0' AND password = '' OR '1' = '1'; +----+------------+----------+ | id | userid | password | +----+------------+----------+ | 1 | hoge | hagehoge | | 2 | foo | gaybarrr | | 3 | Molokheiya | 1231233 | | 4 | bar | hugahugo | +----+------------+----------+ 4 rows in set (0.00 sec)
SQLæãæ¸ãæãã¦ãã©ããªIDï½¥ãã¹ã¯ã¼ãã§ãå
¨ã¦ã®è¡ãåå¾åºæ¥ãããã«ãªã£ã¦ãã¾ãã¾ãã・・・ï¼ï¼
ãã®ããã«æå³ããªãSQLãæ³¨å ¥ï¼injectionï¼ãããã¨ããããã®æ»æã¯SQLã¤ã³ã¸ã§ã¯ã·ã§ã³ã¨å¼ã°ãã¾ãã
ãã®æ»æã¯ãä½ãã¦ã¼ã¶ã¼ãã°ã¤ã³æã ãã«éãã¾ãããï¼
é表示ã«ãã¦ããããè«çåé¤ã®ãã¼ã¿ãå¼ã£å¼µãã ããã¨ãããå
¨é¡§å®¢æ
å ±ãæµåºããããã¨ã¾ã§ããã©ã¦ã¶ã ãã§ç°¡åã«ã§ãã¾ããæãã
対ç
SQLã«çµã¿è¾¼ããã©ã¡ã¼ã¿ã¯å¿ ãã¨ã¹ã±ã¼ããã¾ãããã
ãã¡ããç°¡åã«ã»ã¨ãã©ã®æ»æã黿¢ã§ããããã«ãªãã¾ãã
ã¾ããã®ä¾ã§ããããã¹ã¯ã¼ããå¹³æã§ãã¼ã¿ãã¼ã¹ã«ä¿åãã¦ããæç¹ã§æ¢ã«è«å¤ã§ãã
ãã¹ã¯ã¼ãã¯å¿
ãSHA1ã§ããã·ã¥ã«ãã¦ããã¼ã¿ãã¼ã¹ã«ä¿åãã¾ãã
MD5ã§ãæ§ãã¾ããããMD5ãããããå¼·åãªSHA1ãåºæ¥ãã ãå©ç¨ãã¾ãããã
åè
å¸è²©ã®ã¡ã¼ã«ã½ãããç¨ãã調æ»ã®çµæãæ³å®ããå ¨ã¦ã®ãã¹ã¯ã¼ãã«ã¤ãã¦ã
å¸è²©ããã¦ããPCãç¨ãã¦ãæ¯è¼ççæéã§è§£èªã§ãããã¨ã確èªã§ãã¾ãã
PHPã§ãã¨sha1ã¨ãã颿°ãããã¾ããããç°¡åã«ããã·ã¥ãå©ç¨ã§ãã¾ãã
ã¾ãMySQLã®å ´åãSQLã§SHA1ã«ãããã¨ãåºæ¥ã¾ãã
mysql> SELECT * FROM user; +----+------------+------------------------------------------+ | id | userid | password | +----+------------+------------------------------------------+ | 1 | hoge | cc624022d67e29993916cf116f8696d2aebb6e9f | | 2 | foo | 9534d1983d3235a39fd4f1d4f8e5ece7984e0071 | | 3 | Molokheiya | a971f78af101664553ac2e6d2997b1f7b491936f | | 4 | bar | 044e596b4d04f6733bb03c6a4283c740d21f1350 | +----+------------+------------------------------------------+ 4 rows in set (0.00 sec)
ããã¦SQLã«çµã¿è¾¼ããã©ã¡ã¼ã¿ã®ã¨ã¹ã±ã¼ãã«ã¯ãmysql_real_escape_stringã使ãã¾ãã
ãã£ãã®htmlspecialcharsã¨åãããã«ååãé·ãã®ã§ã1æåã®é¢æ°ã«ãã¦ããã¾ãããã
<?php function x($str) { // SQLã¤ã³ã¸ã§ã¯ã·ã§ã³å¯¾å¦ return mysql_real_escape_string($str); }
ããã¨ã¦ã¼ã¶ã¼IDã«ã0ãããã¹ã¯ã¼ãã«ã' OR '1' = '1ããå
¥åããSQLã¯ãããªããæ»æã¯æç«ããªããªãã¾ãã
mysql> SELECT * FROM user WHERE userid = '0' AND password = '\' OR \'1\' = \'1' LIMIT 1; Empty set (0.00 sec)
ã¡ãªã¿ã«çµæãå¿
ã1è¡ã®ã¿ã«ãªãã¨åãã£ã¦ããå ´åã¯ãSQLã®æå¾ã«ãLIMIT 1ããã¤ãã¾ãã
ããã«ããããªãããã®äºæ
ããã£ã¦ã1è¡ä»¥ä¸ã表示ããããã¨ã¯ããã¾ããã
â»ããã¯ã»ãã¥ãªãã£å¯¾çã¨ããããè±ç¥èã§ãï¼
ãã¦ããã®ã¾ã¾ã§ã¯SHA1ã«ãªã£ã¦ãã¾ããããPHPã¯ãããã¾ãã
<?php $name=x($_POST['id']); $pass=sha1(x($_POST['pass'])); $sql="SELECT * FROM user WHERE userid = '{$name}' AND password = '{$pass}' LIMIT 1;";
ã¾ãã«ãæ°æåä»ãè¶³ãã ãã§ããã
ã¨ãããããç´ äººãæããã£ã¦ãã¾ããã¡ãªé大èå¼±æ§ã2ã¤ä¾ã«ã¨ã£ã¦ã¿ã¾ããã
HTMLã¸ã®å¤æ°æ¸ãåºãã¯ãå¿
ãh颿°ãéãï¼
<?php function h($str) { // XSSå¯¾å¦ return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); }
SQLã¸ã®å¤æ°çµã¿è¾¼ã¿ã¯ãå¿
ãx颿°ãéãï¼
<?php function x($str) { // SQLã¤ã³ã¸ã§ã¯ã·ã§ã³å¯¾å¦ return mysql_real_escape_string($str); }
ããã ãã§è¯ãããèå¼±æ§ã®ããªããå¡ããã¯ãã§ãã
ãã¡ããããã ãã§ã¯ä¸ååã§ãPHPã¯èª°ã§ãç°¡åã«ãµã¼ãã¹ãä½ããã®ã¨åæã«ãããããã®èå¼±æ§ãä½ãã¦ãã¾ãã¾ãã
ãã®ãã¼ã¸ã¯ä¸è¨ããèå¼±æ§ãããã以å¤ã®èå¼±æ§ã«ã¤ãã¦ã詳ãã対çãããã¾ãã®ã§ãå°ãã§ãèå³ãæã£ãæ¹ã¯æ¯éè¦ã¦ã¿ã¦ä¸ããã
PHP と Web アプリケーションのセキュリティについてのメモ
ãã å ¨ã¦ã«å ±éããã»ãã¥ãªãã£å¯¾çã®éåã¨ãã¦ããä¸ãããããã¼ã¿ãä¿¡ç¨ãããªãã¨ããã®ãããã¾ãã
é»è©±çªå·ãå
¥åãããã©ã¼ã ã§ãéããã¦ããã®ãåè§æ°åã«ãªãã¨ã¯éãã¾ããããã¡ãã¨ãããåè§æ°åãã©ãããis_numericçã使ã£ã¦ãã§ãã¯ãã¦ãã ããã
TwitterIDãå
¥åãããã©ã¼ã ã§ãHTMLã¿ã°ãæªæãæã£ãã¹ã¯ãªãããéä¿¡ãããªãã¨ã¯éãã¾ããã正規表現çã使ã£ã¦ãã§ãã¯ãã¦ãã ããã
ã¨ããããåãã°ãã¤å®æãã§ã¯ãªããå©ç¨ããã¦ã¼ã¶ã¼ããã®å®å
¨ã¾ã§èãã¦Webãµã¼ãã¹ãå
¬éãã¦ä¸ããã
ãããåºæ¥ãªãã¨ãããªãå©ç¨ããã®ã¯èªåã身å
ã ãã«ã¨ã©ãã¦ãä¸ç¹å®å¤æ°ã«åãã¦ã¯å
¬éããªãããã«ãã¾ãããã
ããªãã®ããã°ã©ã ãæããæ²ãã¿ã§ã¯ãªããç¬é¡ãããããã¾ãããã«ã