我开始学习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>
时,我会在代码的末尾得到<script>
。
也许我无法修改$_GET
?我来自python所以我不知道$_GET
在某种程度上是否特殊。
修改
我想了解我是否可以改变全局$_GET\$_POST
,就像我做的那样好,因为我不知道txt_check()
内的代码是否适合我。
如果没有,有一种更好的方法来保护我得到的输入?因为我想制定一个标准的保护水平,即使我甚至不知道那里的风险最大。
为什么htmlentities()
对于这种情况不太好?我使用关于php安全性的基本教程来实现它。
答案 0 :(得分:1)
如果您要删除HTML代码,我建议您使用strip_tags
...而不是htmlentities
。
<?php
$mytext = "hello<br><script>alert('everybody');</script>";
$allow = "<br>";
echo strip_tags($mytext,$allow);
?>
这将只删除script
代码。