刚想了一下
post.php中
if (isset($_SESSION['id'])) {
if (isset($_POST['comment'])) {
insert()
}
<form method="post" action="post.php">
<textarea name="comment"></textarea>
<input type="submit" class="btn" value="Submit">
</form>
}
$ _ SESSION ['id']需要设置为访问post.php。这样安全吗?
想想也许有人可以在他们的网站上创建一个会话并制作他们自己的post.php并将其重定向到我的网站?你能做到吗?
<form method="post" action="http://mysite.com/post.php">
<textarea name="comment"></textarea>
<input type="submit" class="btn" value="Submit">
</form>
Exucse我有限的英语
答案 0 :(得分:4)
正如一般建议一样,我总是喜欢“快速纾困”而不是“if-if-if”。意思是,顶部应该看起来更像:
if (!isset($_SESSION['id'])) {
// display_error();
// redirect()
// whatever else needs to be done
exit;
}
// continue as planned
答案 1 :(得分:0)
真正的问题是人们可以拦截数据包中途飞行并将表单的值重写为他们想要的任何内容。您想要实现哪些安全目标?人们将始终完全控制从客户端发送的值,确保您的应用程序不会假设任何数据返回。
查看Firefox的Tamper Data:https://addons.mozilla.org/en-US/firefox/addon/966
答案 2 :(得分:0)
我看不出任何迫在眉睫的问题。如果它至关重要,请确保数据通过https发送,因此劫持网络流量的人不能篡改它(正如Stefan Mai建议的那样)。否则,似乎没问题 - 只要没有人窃取你的用户会话cookie。
decezes方法只是另一种编码风格。它不会增加安全性本身,但可能会阻止草率的程序员以下列形式出错:
if (checkIfLoggedIn()) {
doPrivateThing();
}
doAnotherPrivateThing(); // bug: the programmer should have
// put that into the if-conditional
否则,请确保会话ID存储在cookie中,并且绝不会透过URL透明传递!我现在不确定php.ini中的默认设置,但如果禁用了cookie,它会自动重写URL。更好地检查一下。
据我记忆,ini-option是session.use_only_cookies
(应启用)
更新
不,那不行。会话是在“只是想某人可以在他们的网站上创建一个会话”
session_start();
(或有时自动)创建的。 $_SESSION['id']
与session_id();
无关,只是一些变量。虽然它的命名不是很好,因为其他人确实会混淆它(可维护性!)。更好地命名为$_SESSION['isUserLoggedIn'];
或类似的东西。