3

我是一名技术作家,他写了很多 HTML/CSS,但被扔进了压力锅里用 PHP 重写了一个 Web 应用程序,并且做得相当好,但我有点担心安全性。

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

我让所有这些工作正常,但我担心我正在做的两件事以及它们是否正确:

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

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

谢谢你的帮助!

4

3 回答 3

4

$_SESSION会是你的朋友。在正常的共享主机环境中,$_SESSION可能不会持续任何时间超过,呃,当前会话,所以相应地计划。(IE,除了登录之外,不要依赖它。)

你需要继续阅读session_start和朋友。

此外,请查看此讨论:PHP HTML sanitizer for sanitizing HTML input。bbcode(仅供参考,之所以markdown如此受欢迎是有原因的。)

于 2012-09-11T22:18:13.137 回答
0
  1. 不——每个客户都可以操纵他的 cookie 并发送他们想要的一切——甚至是无效的“登录”cookie。您必须将这些信息服务器端存储在会话中

  2. 您可以使用strip_tags只允许一些特殊标签或使用 html sanitizer

于 2012-09-11T22:19:45.287 回答
0

1. 成功登录后,存储一个新$_SESSION变量,例如用户 ID(因为这似乎经常需要)

例子:

    if(login is successful)
    { 
       $_SESSION['userId'] = $userId;
    }

创建一个 php 身份验证页面,检查以确保填充了会话变量。如果没有,请重定向到拒绝访问或登录页面。

例子:

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

于 2012-09-11T22:25:34.843 回答