ããã«ã¡ã¯ããã«ã¡ã¯ï¼ï¼
Webããã°ã©ãã³ã°ãã¦ã¾ããï¼
ãããPHPã¯ã»ãã¥ãªãã£ããã¡ãã¨ãè¨ããã¦ãããã
ã§ãããã£ã¦ãã¹ã¤ã«PHPãæªãããããªãã¦ã
ãã¶ããã»ãã¥ãªãã£ã¨ãããã¾ã ããããããªã人ãå¤ãã ããªããããªãããªã
ããã°ã£ã¦åå¼·ãããã¨æã£ã¦ãããªãã ãé£ããçå±ã並ãã§ãããããããâ¦ã
ãªã®ã§ä»æ¥ã¯ãã»ãã¥ãªãã£å¯¾çã«ã¤ãã¦ã
ãããã ããã£ã¨ãã°ãããã¨å®å
¨ã«ãªãããã£ã¦ãã¨ããåå¿è
ããã«ã大éæã«æ¸ãã¦ã¿ã¾ãï¼
çå±ãããããªãã¦ããæåã¯ã³ããã§ãã
ãªã«ããããªãããããã£ãã»ãããã£ã¨ãã·ã«ãªãï¼
1. XSS対ç
åçãªãã®ã表示ããã¨ããå ¨é¨ã¨ã¹ã±ã¼ãããã°okã§ãï¼
(NG) ããªãã®åå㯠<?= $name ?> ã§ããï¼
â
(OK) ããªãã®åå㯠<?= htmlspecialchars($name, ENT_QUOTES) ?> ã§ããï¼
ããã ãã
ãã ãå
¨é¨ãããï¼ å¿ããã¨ãããã»ãã¥ãªãã£ãã¼ã«ã«ãªããã
ãã¨åå¿è
ã®ãã¡ã¯ããã¨ã htmlspecialchars ã使ã£ã¦ã
JavaScriptãCSSãhtmlã®å±æ§é¨å(â»)ã«ã¯ãååã¨ãã¦åçãªãã®ãåãè¾¼ã¾ãªãããã«ããããã
â»<div<?= htmlspecialchars($data, ENT_QUOTES) ?>> âãããããã¨ããªã
â»â»ãã¨æåã³ã¼ãã¯UTF-8ã使ããã ã©ããã¦ããã以å¤ã使ãããã²ã¨ã¯ãããåèã«ã
2. SQLã¤ã³ã¸ã§ã¯ã·ã§ã³å¯¾ç
åçãªSQLã使ãã¨ããããªãã¢ãã¹ãã¼ãã¡ã³ããã¤ããã°okã§ãï¼
(NG) $res = $mdb2->query('SELECT name FROM users WHERE id=' . $data);
â
$sth = $mdb2->prepare('SELECT name FROM users WHERE id=?');
$res = $sth->execute($data);
ããã°ã£ã¦èªåã§ã¨ã¹ã±ã¼ããããã¨ããªãã§ã
ãããã¦ããã°ããã¨ã¯DBããã¾ããã£ã¦ããããï¼
3. CSRF対ç
ããã«ã¤ãã¦ã¯ç°¡åãªã³ã¼ããæ¸ãã¦ã¿ããã
â EasyCSRF
20è¡ããããªãã§ã³ããããããçºããããæ¹é ããããã¦ä½¿ã£ã¦ã¿ã¦ãï¼
4. ã¯ãªãã¯ã¸ã£ããã³ã°å¯¾ç
.htaccessãã¡ã¤ã«ã«æ¬¡ã®ä¸è¡ãæ¸ãã ãã
Header set X-FRAME-OPTIONS "DENY"
ããã¬ã³ã¿ã«ãµã¼ãã¼ãªã©ã§ä¸ã®ããæ¹ãã§ããªãã»ã¨ã©ã¼ã«ãªãæã¯ã
PHPã§htmlãåºãåã®ã¨ããã«æ¬¡ã®ããã«æ¸ãã
header('X-FRAME-OPTIONS: DENY');
ããã ãã§ããã®ãã¼ã¸ã¯ã
ä»ã®ãã¼ã¸ã®iframeå
ã«è¡¨ç¤ºãããªããªã ï¼ ã¯ãªãã¯ã¸ã£ããã³ã°ã§ããªããªããã
ã¯ãããããï¼
é£ãããã¨ããªãã¦ããããã ãã§å
¨ç¶ã»ãã¥ã¢ã«ãªããï¼
ç°¡åãªçå±ãç¥ããã人ã¯ãã£ã¡ãèªãã§ã¿ã¦ã â ã»ãã¥ãªãã£ã¾ãã
âãã¨ãã¶ãããã®è¨äºã®ããã¯ãã¼ã¯ã³ã¡ã³ãã«ããã»ãã¥ãªãã£ã®åã人ã®ææããããã並ã¶ã¨æããããæ°ãåãããåèã«ãã¦ã¿ããï¼