PHP初学者安全恐惧

时间:2012-09-11 22:13:16

标签: php security

我是一名技术作家,他已经做了很多HTML / CSS,但已经被投入压力锅,用PHP重写一个网络应用程序并做得相当不错,但我有点担心安全问题。

具体来说,主页面是INDEX.PHP,用户登录。登录后,页面会重写部分内容,并显示未登录的用户无法使用的菜单选项。约50%的用户永远不需要登录,因为他们将查看不需要安全性的公共文档。其他50%的用户将限制对某些文档/页面的查看访问权限,并且能够写入数据库。

我把所有这些工作都很好,但我担心我正在做的两件事以及它们是否合适:

  1. 登录用户可能会被重定向到另一个页面,例如PAGE1.PHP。我不希望他们能够保存PAGE1.PHP的URL并直接转到那里,绕过安全性,所以在PAGE1.PHP我检查了我在INDEX.PHP上创建的登录cookie。如果cookie存在,他们可以转到页面,如果不存在,他们就不能。这是做这种事情的正确方法吗?

  2. 如何阻止恶意用户将重定向插入到各种表单中的多个文本框之一?我需要允许HTML,例如强,字体,背景等。我一直在运行所有文本框值,通过一个函数来检查可能的恶意事物,一次一个,例如“meta http”或“anchors” “或”java脚本“但我不确定这是最好的解决方案。

  3. 感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

$_SESSION将成为你的朋友。在正常的共享托管环境中,$_SESSION可能不会比当前会话持续更长时间,因此需要相应地进行规划。 (IE,除了登录以外,不要依赖它。)

您需要阅读session_start和朋友。

此外,请查看此讨论:PHP HTML sanitizer以清理HTML输入。 (正如仅供参考,bbcodemarkdown如此受欢迎是有原因的。)

答案 1 :(得分:0)

  1. 不 - 每个客户都可以操纵他的cookie并发送他们想要的一切 - 甚至是无效的“登录”Cookie。您必须将这些信息服务器存储在会话中

  2. 您可以使用strip_tags仅允许某些特殊标签或使用html清洁剂

答案 2 :(得分:0)

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。 (或使用准备好的陈述,见Best way to prevent SQL Injection in PHP

相关问题