我是一名技术作家,做了很多HTML/CSS,但为了用PHP重写一个网络应用程序,我被扔进了高压锅,做得相当好,但我有点担心安全性。
具体来说,主页是INDEX.PHP,用户在这里登录。一旦登录,页面就会重写部分内容,并显示未登录用户无法使用的菜单选项。大约50%的用户将永远不需要登录,因为他们将查看不需要安全性的公共文档。其他50%的用户对某些文档/页面的查看权限将受到限制,并且能够写入数据库。
我做得很好,但我担心我正在做的两件事以及它们是否合适:
-
登录的用户可能会被重定向到另一个页面,比如PAGE1.PHP。我不希望他们能够保存PAGE1.PPH的URL,然后绕过安全性直接转到那里,所以在PAGE1.PPHP上,我要检查我在INDEX.PHP上创建的登录cookie。如果cookie存在,他们可以转到该页面,如果不存在,他们就不能。这是做这种事情的正确方法吗?
-
如何阻止恶意用户在我的各种表单上的众多文本框中插入重定向?我需要允许HTML,如strong、font、background等。我一直在通过一个函数运行所有文本框值,该函数一次检查可能的恶意内容,如"meta http"、"anchors"或"java script",但我不确定这是最好的解决方案。
谢谢你的帮助!
$_SESSION
将是您的朋友。在正常的共享托管环境中,$_SESSION
的持续时间可能不会超过当前会话,因此要相应地进行计划。(IE,除了登录之外,不要依赖它。)
你需要阅读session_start
和朋友们的文章。
此外,请查看以下讨论:用于清理HTML输入的PHP HTML清理程序。(仅供参考,bbcode
和markdown
如此受欢迎是有原因的。)
-
不,每个客户都可以操作他的Cookie并发送他们想要的一切,甚至是无效的"登录"Cookie。您必须将这些信息服务器端存储在会话中
-
你可以使用
strip_tags
只允许一些特殊标签,或者使用html消毒剂
1。成功登录后,存储一个新的$_SESSION
变量,比如用户ID(因为这似乎经常需要)
示例:
if(login is successful)
{
$_SESSION['userId'] = $userId;
}
创建一个php-auth页面,进行检查以确保已填充会话var。如果没有,则重定向到拒绝访问或登录页面。
示例:
if(! isset($_SESSION['userId']) || $_SESSION['userId'] == '')
{
header("Location: accessDenied.php?msg=Not logged in");
}
在每个安全页面上,require('auth.php');
2。您可以在文本框上使用strip_tags
,在最终进入数据库的用户输入中使用mysqli_real_escape_string
。(或者使用准备好的语句,请参阅防止PHP中SQL注入的最佳方法)