Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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_Sql Server_Database - Fatal编程技术网

Php 数据库与应用程序安全设计

Php 数据库与应用程序安全设计,php,sql-server,database,Php,Sql Server,Database,因此,我目前正在创建一个小型公共网站(例如,用户可以在其中登录和更改个人信息),但我想知道数据库安全性实际上是如何为这类事情设计的,因此我有几个问题 例如,当internet用户访问stackoverflow之类的页面时(不登录站点),为了能够查看所有发布的问题,他登录了哪个数据库用户或角色?那么,当用户使用他的帐户登录时,他在数据库中的角色是否会改变(因为他拥有更多的权限) 如果我将数据库设置为既有“用户”又有“权限”表,我可以确保用户只能访问自己的数据,至少是应用程序端的数据。但是,既然我假

因此,我目前正在创建一个小型公共网站(例如,用户可以在其中登录和更改个人信息),但我想知道数据库安全性实际上是如何为这类事情设计的,因此我有几个问题

例如,当internet用户访问stackoverflow之类的页面时(不登录站点),为了能够查看所有发布的问题,他登录了哪个数据库用户或角色?那么,当用户使用他的帐户登录时,他在数据库中的角色是否会改变(因为他拥有更多的权限)

如果我将数据库设置为既有“用户”又有“权限”表,我可以确保用户只能访问自己的数据,至少是应用程序端的数据。但是,既然我假设每个公共用户都有相同的“数据库登录”或“角色”,那么如何确保数据仍然受到数据库端的保护呢

我知道我的问题可能有点不清楚,但请不要犹豫,让我澄清一下。我真的不知道从哪里开始

谢谢


注意:我目前正在使用SQL Server,在用户表中有一个匿名用户,在权限表中有最低权限,这有什么问题?

在用户表中有一个匿名用户,在权限表中有最低权限,这有什么问题?

数据库角色不会改变,但函数会改变。用户是从后端代码授权的,而不是直接从数据库授权的。如果您试图为数据库的每个用户创建登录名,这将不是一个好办法,因为可能有数千或数百万用户可以通过某些权限直接访问您的数据库。

数据库角色不会改变,但函数会改变。用户是从后端代码授权的,而不是直接从数据库授权的。如果您试图为数据库中的每个用户创建登录,这将不是一个好办法,因为可能有数千或数百万用户可以通过某种权限直接访问您的数据库。

关于您的第一个问题:当用户首次登录网页时,他们没有“角色”。您的脚本将决定用户可以看到和不能看到的内容

例如,您有一篇只有特定用户才能看到的帖子。默认情况下,该帖子将被隐藏。然后,脚本应该运行一个测试,查看该用户当前是否登录,以及该用户是否在查看该帖子的权限组中。如果是,则显示帖子


您的数据库不应以任何方式访问。

对于您的第一个问题:当用户第一次登录网页时,他们没有“角色”。您的脚本将决定用户可以看到和不能看到的内容

例如,您有一篇只有特定用户才能看到的帖子。默认情况下,该帖子将被隐藏。然后,脚本应该运行一个测试,查看该用户当前是否登录,以及该用户是否在查看该帖子的权限组中。如果是,则显示帖子


您的数据库不应以任何方式访问。

您几乎已经回答了自己的问题

通常,您的网站将在某个用户帐户下运行,我们称之为“IWEB”,无论用户是否登录您的网站,访问您网站的每个人的该用户帐户都是相同的

IWEB将具有从数据库读取数据的权限。匿名用户就是这样工作的

在数据库中,您将有一个用户表,可能是一个权限表。IWEB将被授予创建新用户、更新用户的数据库权限。可能会阻止它删除用户

您的应用程序将(尽管IWEB)使用这些表来控制谁有权访问您的应用程序以及谁可以更新什么。应用程序中的错误(例如SQL注入)可能允许恶意用户创建管理员帐户、更改其他用户密码等

在某些情况下,例如使用Windows身份验证,您可以通过登录到站点的用户,将其转换为数据库用户并授予他们权限。但是,对于面向公众的网站,您不太可能这样做

如果表不是直接访问的,而是通过存储过程控制的,则可能会拒绝对底层表的访问。其中一个参数是当前登录的用户,该用户可以控制数据库层的访问(防止用户更新另一个用户配置文件)。当然,除非您的应用程序存在允许攻击者更改其当前登录用户的错误


这完全取决于您的安全要求。不过,总的来说,您将控制应用程序的访问

你几乎回答了你自己的问题

通常,您的网站将在某个用户帐户下运行,我们称之为“IWEB”,无论用户是否登录您的网站,访问您网站的每个人的该用户帐户都是相同的

IWEB将具有从数据库读取数据的权限。匿名用户就是这样工作的

在数据库中,您将有一个用户表,可能是一个权限表。IWEB将被授予创建新用户、更新用户的数据库权限。可能会阻止它删除用户

您的应用程序将(尽管IWEB)使用这些表来控制谁有权访问您的应用程序以及谁可以更新什么。应用程序中的错误(例如SQL注入)可能允许恶意用户创建管理员帐户、更改其他用户密码等

在某些情况下,例如使用Windows身份验证,您可以通过登录到站点的用户,将其转换为数据库用户并授予他们权限。但是,对于面向公众的网站,您不太可能这样做

如果表不是直接访问的,而是通过存储过程控制的,则可能会拒绝访问