在開發網頁時,因為安全性的問題,很多眉眉角角要注意!

URL列使用GET的參數傳送
urlencode:用urlencode來encode參數

PHP的值輸出到HTML上
htmlspecialchars:只encode特定HTML標籤符號(例如 <、>、&)
htmlentities:整個都做encode

<?php
    $str='<a href="test.php">這是測試</a>';
    //使用htmlentities的中文會出現亂碼
    echo htmlentities($str);
    //htmlspecialchars中文則是正常
    echo htmlspecialchars($str);
    //decode
    echo html_entity_decode(htmlspecialchars($str));
?>

PHP的值輸出到Javascript上
PHP如果要輸出到Javascript上必須使用json_encode

<script type="text/javascript">
    alert(<?= json_encode($str); ?>);
</script>

另外htmlentities和htmlspecialchars這兩個函式都有flags(細部條件判斷)可以選擇

<?php
    $str="A 'quote' is <b>bold</b>";
    //ENT_QUOTES 是針對單引號及雙引號encode
    echo htmlentities($str, ENT_QUOTES);
    echo htmlspecialchars($str, ENT_QUOTES);
    //output A 'quote' is <b>bold</b>
?>

另外也可以選擇編碼

<?php
    $str="A 'quote' is <b>bold</b>";
    echo htmlentities($str, ENT_QUOTES, "UTF-8");
    echo htmlspecialchars($str, ENT_QUOTES, "UTF-8");
?>

詳細flags以及編碼參數可以參考
htmlspecialchars PHP官網
htmlentities

Categories: PHP