我制作了一个简单的base64解码器表单,它通过textarea接收输入。我假设输入是base64编码的。如果它不是base64输入,并且返回了PHP错误或垃圾,我现在不介意但是,从安全角度来看,我是否需要对此输入进行任何验证或卫生?
该页面名为error-decoder.php,它提交给自己,不与数据库或其他任何内容交互。以下是整个事情:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div id="container" style="width: 80%; margin: 0 auto; font-family: sans-serif;">
<form name="error-decoder" action="error-decoder.php" method="post">
<textarea name="error-text-area" style="width: 100%; height: 400px;">
<?php if(!empty($_POST['error-text-area'])){ echo $_POST['error-text-area']; } ?>
</textarea>
<button type="submit" style="float: right;">Decode</button>
</form>
<?php
if(!empty($_POST['error-text-area'])){
?>
<p>Output:</p>
<hr>
<div id="error-output">
<br />
<?php
echo base64_decode($_POST['error-text-area']) . "</div>";
}
?>
</div>
</body>
</html>
是否需要做任何事情才能使用户或我的服务器安全?是否有重要的php.ini设置我需要担心这会影响你的答案?我不关心错误或垃圾,除了它可能会影响安全性。感谢您的任何信息!
答案 0 :(得分:4)
当您输出到html时,您应该使用htmlspecialchars()
来避免数据破坏html。除非你当然输出html本身。
所以:
echo htmlspecialchars(base64_decode($_POST['error-text-area']));
答案 1 :(得分:2)
您正在使用POST,因此无法进行跨站点脚本编写,但本地HTML /脚本注入可能。唯一的安全漏洞是用户在脚下射击自己:如果他们提交base64编码的恶意HTML / JS,他们可能最终将自己重定向到恶意页面。因此,清理解码函数的输出。
答案 2 :(得分:0)
是。由于该输出用于HTML查看,因此需要将其编码为HTML。通过htmlentities()
进行简单的传递可以解决这个问题。
实际的漏洞是有人可能会向您的网页注入<script>
标签或类似的危险标签,并会影响该网页。