具有htmlentities的代码无法正常工作

时间:2013-12-21 13:13:31

标签: php web

我开始学习php并创建一个代码来学习如何在php代码中使用GET/POST。 所以我听说可以通过输入执行不安全的代码,所以我使用了创建一个检查器 htmlentities()功能。

 <?php

if (isset($_POST['firstname'], $_POST['lastname'], $_POST['pwd']) or isset($_GET['firstname'], $_GET['lastname'], $_GET['pwd'])) {
    txt_check();
    $fname = $_GET['firstname'];
    $lname = $_GET['lastname'];
    $pwd = $_GET['pwd'];
    if ($fname == 'Or' and $lname == 'Halimi' and $pwd == 'password') {
        print 'Welcome master';
    } else {
        print 'You are not my master!';
    }
    echo format('<br/> <br/> {} {}', array($fname, $lname));  # like format in python
}

function txt_check() {
    foreach ($_GET as $name => $string) {
        $_GET[$name] = htmlentities($_GET[$name], ENT_QUOTES, 'UTF-8');
    }
    foreach ($_POST as $name => $string) {
        $_POST[$name] = htmlentities($_POST[$name], ENT_QUOTES, 'UTF-8');
    }
}
?>

问题是我的功能txt_check()无效, 但是当我放echo htmlentities($fname, ENT_QUOTES, 'UTF-8') #fname=<script>时,我会在代码的末尾得到&lt;script&gt;。 也许我无法修改$_GET?我来自python所以我不知道$_GET在某种程度上是否特殊。

修改

我想了解我是否可以改变全局$_GET\$_POST,就像我做的那样好,因为我不知道txt_check()内的代码是否适合我。 如果没有,有一种更好的方法来保护我得到的输入?因为我想制定一个标准的保护水平,即使我甚至不知道那里的风险最大。

为什么htmlentities()对于这种情况不太好?我使用关于php安全性的基本教程来实现它。

1 个答案:

答案 0 :(得分:1)

如果您要删除HTML代码,我建议您使用strip_tags ...而不是htmlentities

<?php
$mytext = "hello<br><script>alert('everybody');</script>";
$allow  = "<br>";
echo strip_tags($mytext,$allow);
?>

这将只删除script代码。