PHP ±íµ¥ÑéÖ¤
±¾½ÚºÍÏÂÒ»½Ú½²½âÈçºÎʹÓà PHP À´ÑéÖ¤±íµ¥Êý¾Ý¡£
PHP ±íµ¥ÑéÖ¤
Ìáʾ£ºÔÚ´¦Àí PHP ±íµ¥Ê±ÇëÖØÊÓ°²È«ÐÔ£¡
ÕâÐ©Ò³Ãæ½«Õ¹Ê¾ÈçºÎ°²È«µØ´¦Àí PHP ±íµ¥¡£¶Ô HTML ±íµ¥Êý¾Ý½øÐÐÊʵ±µÄÑéÖ¤¶ÔÓÚ·À·¶ºÚ¿ÍºÍÀ¬»øÓʼþºÜÖØÒª£¡
ÎÒÃÇÉÔºóʹÓÃµÄ HTML ±íµ¥°üº¬¶àÖÖÊäÈë×ֶΣº±ØÐèºÍ¿ÉÑ¡µÄÎı¾×ֶΡ¢µ¥Ñ¡°´Å¥ÒÔ¼°Ìá½»°´Å¥£º
ÉÏÃæµÄ±íµ¥Ê¹ÓÃÈçÏÂÑéÖ¤¹æÔò£º
×Ö¶Î | ÑéÖ¤¹æÔò |
---|---|
Name | ±ØÐè¡£±ØÐë°üº¬×ÖĸºÍ¿Õ¸ñ¡£ |
±ØÐè¡£±ØÐë°üº¬ÓÐЧµÄµç×ÓÓʼþµØÖ·£¨°üº¬ @ ºÍ .£©¡£ | |
Website | ¿ÉÑ¡¡£Èç¹ûÑ¡ÌÔò±ØÐë°üº¬ÓÐЧµÄ URL¡£ |
Comment | ¿ÉÑ¡¡£¶àÐÐÊäÈë×ֶΣ¨Îı¾¿ò£©¡£ |
Gender | ±ØÐè¡£±ØÐëÑ¡ÔñÒ»Ïî¡£ |
Ê×ÏÈÎÒÃÇ¿´Ò»ÏÂÕâ¸ö±íµ¥µÄ´¿ HTML ´úÂ룺
Îı¾×Ö¶Î
name¡¢email ºÍ website ÊôÓÚÎı¾ÊäÈëÔªËØ£¬comment ×Ö¶ÎÊÇÎı¾¿ò¡£HTML ´úÂëÊÇÕâÑùµÄ£º
Name: <input type="text" name="name"> E-mail: <input type="text" name="email"> Website: <input type="text" name="website"> Comment: <textarea name="comment" rows="5" cols="40"></textarea>
µ¥Ñ¡°´Å¥
gender ×Ö¶ÎÊǵ¥Ñ¡°´Å¥£¬HTML ´úÂëÊÇÕâÑùµÄ£º
Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male
±íµ¥ÔªËØ
±íµ¥µÄ HTML ´úÂëÊÇÕâÑùµÄ£º
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
µ±Ìá½»´Ë±íµ¥Ê±£¬Í¨¹ý method="post" ·¢ËÍ±íµ¥Êý¾Ý¡£
ʲôÊÇ $_SERVER["PHP_SELF"] ±äÁ¿£¿
$_SERVER["PHP_SELF"] ÊÇÒ»ÖÖ³¬È«¾Ö±äÁ¿£¬Ëü·µ»Øµ±Ç°Ö´Ðнű¾µÄÎļþÃû¡£
Òò´Ë£¬$_SERVER["PHP_SELF"] ½«±íµ¥Êý¾Ý·¢Ë͵½Ò³Ãæ±¾Éí£¬¶ø²»ÊÇÌø×ªµ½ÁíÒ»ÕÅÒ³Ãæ¡£ÕâÑù£¬Óû§¾ÍÄܹ»ÔÚ±íµ¥Ò³Ãæ»ñµÃ´íÎóÌáʾÐÅÏ¢¡£
ʲôÊÇ htmlspecialchars() º¯Êý£¿
htmlspecialchars() º¯Êý°ÑÌØÊâ×Ö·ûת»»Îª HTML ʵÌå¡£ÕâÒâζ×Å < ºÍ > Ö®ÀàµÄ HTML ×Ö·û»á±»Ì滻Ϊ < ºÍ > ¡£ÕâÑù¿É·ÀÖ¹¹¥»÷Õßͨ¹ýÔÚ±íµ¥ÖÐ×¢Èë HTML »ò JavaScript ´úÂ루¿çÕ¾µã½Å±¾¹¥»÷£©¶Ô´úÂë½øÐÐÀûÓá£
¹ØÓÚ PHP ±íµ¥°²È«ÐÔµÄÖØÒªÌáʾ
$_SERVER["PHP_SELF"] ±äÁ¿Äܹ»±»ºÚ¿ÍÀûÓã¡
Èç¹ûÄúµÄÒ³ÃæÊ¹ÓÃÁË PHP_SELF£¬Óû§Äܹ»ÊäÈëÏ»®ÏßÈ»ºóÖ´ÐпçÕ¾µã½Å±¾£¨XSS£©¡£
Ìáʾ£º¿çÕ¾µã½Å±¾£¨Cross-site scripting£¬XSS£©ÊÇÒ»ÖÖ¼ÆËã»ú°²È«Â©¶´ÀàÐÍ£¬³£¼ûÓÚ Web Ó¦ÓóÌÐò¡£XSS Äܹ»Ê¹¹¥»÷ÕßÏòÆäËûÓû§ä¯ÀÀµÄÍøÒ³ÖÐÊäÈë¿Í»§¶Ë½Å±¾¡£
¼ÙÉèÎÒÃǵÄÒ»ÕÅÃûΪ "test_form.php" µÄÒ³ÃæÖÐÓÐÈçÏÂ±íµ¥£º
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
ÏÖÔÚ£¬Èç¹ûÓû§½øÈëµÄÊǵØÖ·À¸ÖÐÕý³£µÄ URL£º"http://www.example.com/test_form.php"£¬ÉÏÃæµÄ´úÂë»áת»»Îª£º
<form method="post" action="test_form.php">
µ½Ä¿Ç°£¬Ò»ÇÐÕý³£¡£
²»¹ý£¬Èç¹ûÓû§ÔÚµØÖ·À¸ÖмüÈëÁËÈçÏ URL£º
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
ÔÚÕâÖÖÇé¿öÏ£¬ÉÏÃæµÄ´úÂë»áת»»Îª£º
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Õâ¶Î´úÂë¼ÓÈëÁËÒ»¶Î½Å±¾ºÍÒ»¸öÌáʾÃüÁî¡£²¢ÇÒµ±´ËÒ³Ãæ¼ÓÔØºó£¬¾Í»áÖ´ÐÐ JavaScript ´úÂ루Óû§»á¿´µ½Ò»¸öÌáʾ¿ò£©¡£Õâ½ö½öÊÇÒ»¸ö¹ØÓÚ PHP_SELF ±äÁ¿ÈçºÎ±»ÀûÓõļòµ¥ÎÞº¦°¸Àý¡£
ÄúÓ¦¸ÃÒâʶµ½ <script> ±êÇ©ÄÚÄܹ»Ìí¼ÓÈκΠJavaScript ´úÂ룡ºÚ¿ÍÄܹ»°ÑÓû§Öض¨Ïòµ½Áíһ̨·þÎñÆ÷ÉϵÄij¸öÎļþ£¬¸ÃÎļþÖеĶñÒâ´úÂëÄܹ»¸ü¸ÄÈ«¾Ö±äÁ¿»ò½«±íµ¥Ìá½»µ½ÆäËûµØÖ·ÒÔ±£´æÓû§Êý¾Ý£¬µÈµÈ¡£
Èç¹û±ÜÃâ $_SERVER["PHP_SELF"] ±»ÀûÓã¿
ͨ¹ýʹÓà htmlspecialchars() º¯ÊýÄܹ»±ÜÃâ $_SERVER["PHP_SELF"] ±»ÀûÓá£
±íµ¥´úÂëÊÇÕâÑùµÄ£º
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() º¯Êý°ÑÌØÊâ×Ö·ûת»»Îª HTML ʵÌå¡£ÏÖÔÚ£¬Èç¹ûÓû§ÊÔͼÀûÓà PHP_SELF ±äÁ¿£¬»áµ¼ÖÂÈçÏÂÊä³ö£º
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
ÎÞ·¨ÀûÓã¬Ã»ÓÐΣº¦£¡
ͨ¹ý PHP ÑéÖ¤±íµ¥Êý¾Ý
ÎÒÃÇÒª×öµÄµÚÒ»¼þÊÂÊÇͨ¹ý PHP µÄ htmlspecialchars() º¯Êý´«µÝËùÓбäÁ¿¡£
ÔÚÎÒÃÇʹÓà htmlspecialchars() º¯Êýºó£¬Èç¹ûÓû§ÊÔͼÔÚÎı¾×Ö¶ÎÖÐÌá½»ÒÔÏÂÄÚÈÝ£º
<script>location.href('http://www.hacked.com')</script>
- ´úÂë²»»áÖ´ÐУ¬ÒòΪ»á±»±£´æÎª×ªÒå´úÂ룬¾ÍÏñÕâÑù£º
<script>location.href('http://www.hacked.com')</script>
ÏÖÔÚÕâÌõ´úÂëÏÔʾÔÚÒ³ÃæÉÏ»ò e-mail ÖÐÊǰ²È«µÄ¡£
ÔÚÓû§Ìá½»¸Ã±íµ¥Ê±£¬ÎÒÃÇ»¹Òª×öÁ½¼þÊ£º
- £¨Í¨¹ý PHP trim() º¯Êý£©È¥³ýÓû§ÊäÈëÊý¾ÝÖв»±ØÒªµÄ×Ö·û£¨¶àÓàµÄ¿Õ¸ñ¡¢ÖƱí·û¡¢»»ÐУ©
- £¨Í¨¹ý PHP stripslashes() º¯Êý£©É¾³ýÓû§ÊäÈëÊý¾ÝÖеķ´Ð±¸Ü£¨\£©
½ÓÏÂÀ´ÎÒÃÇ´´½¨Ò»¸ö¼ì²éº¯Êý£¨Ïà±ÈÒ»±é±éµØÐ´´úÂ룬ÕâÑùЧÂʸüºÃ£©¡£
ÎÒÃǰѺ¯ÊýÃüÃûΪ test_input()¡£
ÏÖÔÚ£¬ÎÒÃÇÄܹ»Í¨¹ý test_input() º¯Êý¼ì²éÿ¸ö $_POST ±äÁ¿£¬½Å±¾ÊÇÕâÑùµÄ£º
ʵÀý
<?php
// ¶¨Òå±äÁ¿²¢ÉèÖÃΪ¿ÕÖµ
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Çë×¢ÒâÔڽű¾¿ªÍ·£¬ÎÒÃǼì²éÁË±íµ¥ÊÇ·ñʹÓà $_SERVER["REQUEST_METHOD"] ½øÐÐÌá½»¡£Èç¹û REQUEST_METHOD ÊÇ POST£¬ÄÇô±íµ¥Òѱ»Ìá½» - ²¢ÇÒÓ¦¸Ã¶ÔÆä½øÐÐÑéÖ¤¡£Èç¹ûδÌá½»£¬ÔòÌø¹ýÑéÖ¤²¢ÏÔʾһ¸ö¿Õ°×±íµ¥¡£
²»¹ý£¬ÔÚÉÏÃæµÄÀý×ÓÖУ¬ËùÓÐÊäÈë×ֶζ¼ÊÇ¿ÉÑ¡µÄ¡£¼´Ê¹Óû§Î´ÊäÈëÈκÎÊý¾Ý£¬½Å±¾Ò²ÄÜÕý³£¹¤×÷¡£
ÏÂÒ»²½ÊÇÖÆ×÷±ØÌîÊäÈë×ֶΣ¬²¢´´½¨ÐèҪʱʹÓõĴíÎóÏûÏ¢¡£