首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP和MySQL创建用户配置文件

如何使用PHP和MySQL创建用户配置文件
EN

Stack Overflow用户
提问于 2009-07-25 00:22:20
回答 3查看 15.5K关注 0票数 9

我需要一些关于创建用户配置文件系统的帮助。我希望它像Facebook或Myspace那样,在地址后面只有用户名,没有问号或任何东西,例如www.mysite.com/username。我已经完成了所有的注册、日志脚本等,但是如何使用上面的URL示例"/username“进入配置文件呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-25 00:23:57

您需要创建一个mod重写,它采用第一个目录并将其作为$_GET参数传递。

试试这个:

代码语言:javascript
复制
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1

这应该会将'/‘之后的任何内容重写为index.php?user=directory

票数 7
EN

Stack Overflow用户

发布于 2009-07-25 02:39:28

以下是我的答案的节选版本,以防任何人在tldr时刻:

  1. 创建一个名为"users".
  2. Inside的目录,并使用以下mod_rewrite创建一个.htaccess文件:

REQUEST_URIRewriteEngine on

RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI

现在,对用户目录进行的所有扩展的页面请求都将转到index.php

index.php获取用户输入的URL,并获取末尾的部分。有很多种方法可以做到这一点,如果你知道最后一部分永远是用户名,而不是用户名/图片/,这里有一个简单的方法:

代码语言:javascript
复制
 $url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
 $user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
 $user_name = str_replace("/", "", $user_request); //this leaves 'foo'

现在,只需在DB中查询该用户名。如果存在,index.php会输出配置文件,如果它没有将脚本重定向到: /users/404.php

但是,如果用户确实存在,您的访问者将看到的是他们输入的

代码语言:javascript
复制
www.example.org/users/foo/

他们进入了foo的用户页面。

没有get变量可供黑客利用,一个漂亮的、容易放在另一个博客或名片上的URL。

实际上,可以去掉"?“并且有一个很好的简单的www.example.org/users/someusername。

我在A List Apart上Till Quack的文章"How to Succeed with URLs“中了解到了这一点。

因此,您需要了解Apache、.htaccess和mod_rewrite,这种方法确实要求您了解安全风险并说明它们的原因。这是基本的想法:

您创建了一个名为"users“的目录(您不必这样做,但这将简化整个过程),并在该目录中放入包含一个mod_rewite的.htaccess文件,该all有效地表示”所有非特定类型的文件或目录请求(图像、pdf)都应发送到此脚本,该脚本将处理将用户发送到何处“。本文中的mod_rewrite如下所示:

代码语言:javascript
复制
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php

在我的示例中,它应该是"/ your _web_root/users/index.php",它更简单的原因是因为这个脚本不是处理页面上的所有请求,而是只处理用户目录中的请求。

然后,您有一个php脚本,它会说“好的,给出的URL是什么?”它基本上抓住了最后一个斜杠后面的部分(或者两个,如果最后还有一个斜杠的话),清理它找到的东西(这真的很关键),并问“这个用户名是否存在于我的数据库中?”如果是,它会将请求者发送到用户的配置文件,但会提供一个漂亮的URL (我们稍后会讲到),如果不是,它会将它们发送到“未找到用户”页面,或者您想要的任何内容。

因此,如果它找到了您的用户,PHP脚本将输出用户配置文件(同样,请确保对其进行清理。任何你可能有的笨蛋用户都可以--如果你给他们机会--将恶意代码嵌入到他们自己的配置文件中,因为他们知道查看该配置文件的浏览器将执行该代码)。由于请求的页面是:

代码语言:javascript
复制
www.example.org/users/example_user

由于您使用的是mod_rewrite而不是重定向,因此URL保持不变,并且.htaccess文件拉出的脚本只会转储用户配置文件。对于访问者来说,他们只是看到他们输入了上面的url,然后用户配置文件就会出现。

您还希望使用PHP脚本检查用户是否重定向到"user not found“页面,而不是简单地让它输出"user_not_found”页面。这就是说,任何人只要输入:

代码语言:javascript
复制
www.example.org/users/blabhaboehbohe

将看到URL更改为

代码语言:javascript
复制
www.example.org/users/notfound/

而不是看到URL保持不变。如果黑客发现URL没有改变,他们现在知道你正在使用一个mod_rewrite,因此必须有一个脚本来处理实际的输出。如果他们知道了这一点,他们就会开始疯狂地寻找你可能留下的每一个安全漏洞。

干杯。

票数 4
EN

Stack Overflow用户

发布于 2009-07-25 00:42:03

看一看rewrite engine。一些框架也有完成这项工作的类,比如Zend Framework有你可以使用的Zend_Router。你可以自己使用这个版本,其他框架也有,请查看文档了解你喜欢的版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1180779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档