PHP初学者安全恐惧
我是一个技术作家,做了很多HTML/CSS,但却被扔进了一个压力锅,用PHP重写了一个web应用程序,而且做得相当不错,但我有点担心安全性 具体来说,主页面是INDEX.PHP,用户在其中登录。登录后,页面将重写部分内容,并显示未登录用户无法使用的菜单选项。大约50%的用户将永远不需要登录,因为他们将查看不需要安全保护的公共文档。另外50%的用户将限制对某些文档/页面的查看权限,并能够写入数据库 我很好地完成了所有这些工作,但我关心的是我正在做的两件事以及它们是否合适:PHP初学者安全恐惧,php,security,Php,Security,我是一个技术作家,做了很多HTML/CSS,但却被扔进了一个压力锅,用PHP重写了一个web应用程序,而且做得相当不错,但我有点担心安全性 具体来说,主页面是INDEX.PHP,用户在其中登录。登录后,页面将重写部分内容,并显示未登录用户无法使用的菜单选项。大约50%的用户将永远不需要登录,因为他们将查看不需要安全保护的公共文档。另外50%的用户将限制对某些文档/页面的查看权限,并能够写入数据库 我很好地完成了所有这些工作,但我关心的是我正在做的两件事以及它们是否合适: 登录的用户可能会被重定向
谢谢你的帮助
$\u SESSION
将是您的朋友。在正常的共享托管环境中,$\u会话
的持续时间可能不会超过当前会话的持续时间,因此需要相应地计划。(也就是说,除了登录以外,不要依赖它。)
您需要阅读会话\u开始
和朋友
此外,请查看以下讨论:用于清理HTML输入。(仅供参考,bbcode
和markdown
如此流行是有原因的。)
strip_标记仅允许某些特殊标记,或者使用html消毒液
一,。成功登录后,存储一个新的
$\u SESSION
变量,例如用户ID(因为这似乎是经常需要的)
例如:
if(login is successful)
{
$_SESSION['userId'] = $userId;
}
if(! isset($_SESSION['userId']) || $_SESSION['userId'] == '')
{
header("Location: accessDenied.php?msg=Not logged in");
}
创建一个php验证页面,该页面检查以确保已填充会话变量。否则,重定向到拒绝访问或登录页面
例如:
if(login is successful)
{
$_SESSION['userId'] = $userId;
}
if(! isset($_SESSION['userId']) || $_SESSION['userId'] == '')
{
header("Location: accessDenied.php?msg=Not logged in");
}
在每个安全页面上,require('auth.php')代码>
二,。您可以在文本框上使用strip_标记
,在用户输入到数据库时使用mysqli_real_escape_字符串
。(或使用事先准备好的语句,请参阅)您可以从阅读开始。有很多简单的登录系统,通常在每个安全页面上都包含身份验证方法。您还应该确保自己在使用时是安全的。@Scott-我知道您是新来的-请记住。如果其中一个答案对你有用,别忘了接受。哇,谢谢你的快速回复。今晚我要做很多关于$U课程的阅读,这些消毒剂似乎比我目前使用的手动方式要好。为什么要重新发明轮子?你是说session\u start
,而不是start\u session
,你还可以使用session\u set\u cookie\u params()
@Mike--谢谢,修复了我答案中的函数名。至于session\u set\u cookie\u params()
,这并不是影响会话持续时间的唯一因素。PHP有会话清理代码来删除过期的会话。虽然所有这些都是可以控制的,但是对于一个新手来说,这是一件很难做到的事。对不起。我误读了mysql\u real\u escape\u字符串。我将删除我的评论。编辑以指示链接的问题作为真实转义字符串的替代。还要确保在每次请求的会话中验证用户id(在数据库中查找),否则登录的用户在删除或停用后可能有不正确的访问权限,或者权限更改。