Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP初学者安全恐惧_Php_Security - Fatal编程技术网

PHP初学者安全恐惧

PHP初学者安全恐惧,php,security,Php,Security,我是一个技术作家,做了很多HTML/CSS,但却被扔进了一个压力锅,用PHP重写了一个web应用程序,而且做得相当不错,但我有点担心安全性 具体来说,主页面是INDEX.PHP,用户在其中登录。登录后,页面将重写部分内容,并显示未登录用户无法使用的菜单选项。大约50%的用户将永远不需要登录,因为他们将查看不需要安全保护的公共文档。另外50%的用户将限制对某些文档/页面的查看权限,并能够写入数据库 我很好地完成了所有这些工作,但我关心的是我正在做的两件事以及它们是否合适: 登录的用户可能会被重定向

我是一个技术作家,做了很多HTML/CSS,但却被扔进了一个压力锅,用PHP重写了一个web应用程序,而且做得相当不错,但我有点担心安全性

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

我很好地完成了所有这些工作,但我关心的是我正在做的两件事以及它们是否合适:

  • 登录的用户可能会被重定向到另一个页面,比如PAGE1.PHP。我不希望他们能够保存PAGE1.PHP的URL,直接转到那里,绕过安全性,因此在PAGE1.PHP上,我检查了我在INDEX.PHP上创建的登录cookie。如果cookie存在,他们可以转到页面,如果不存在,他们不能。这样做对吗

  • 如何阻止恶意用户将重定向插入各种表单上的多个文本框之一?我需要允许HTML,如strong、font、background等。我一直在通过一个函数运行所有文本框值,该函数检查可能的恶意内容,一次一个,例如“meta http”或“anchors”或“java script”,但我不确定这是最佳解决方案


  • 谢谢你的帮助

    $\u SESSION
    将是您的朋友。在正常的共享托管环境中,
    $\u会话
    的持续时间可能不会超过当前会话的持续时间,因此需要相应地计划。(也就是说,除了登录以外,不要依赖它。)

    您需要阅读
    会话\u开始
    和朋友

    此外,请查看以下讨论:用于清理HTML输入。(仅供参考,
    bbcode
    markdown
    如此流行是有原因的。)

  • 否-每个客户都可以操纵他的Cookie并发送他们想要的任何东西-即使是无效的“登录”Cookie。您必须将这些信息存储在服务器端的会话中

  • 您可以使用
    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(在数据库中查找),否则登录的用户在删除或停用后可能有不正确的访问权限,或者权限更改。