- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用 SQLite
和存储在 文件系统
上的 session 编写了一个 PHP 网络应用程序。
这在功能上很好,而且维护成本低。但是,现在它需要在共享主机上运行。
共享主机上的所有 Web 应用程序都以同一用户身份运行,因此我用户的 session 数据易受攻击,数据库、代码等也是如此。
在这种情况下,许多人建议将 session 存储在 DBMS
中,例如 MySQL
。所以起初我以为我会这样做,并将 SQLite
数据也移动到 MySQL
中。但后来我意识到 Web 应用程序用户需要能够读取 MySQL
凭据,所以我回到原点。
我认为最好的解决方案是将 PHP
用作 CGI
,这样它就可以作为每个 Web 应用程序的不同用户运行。这听起来不错,但我的主机并没有这样做,它使用 mod_php
。从管理员的角度来看,启用此功能是否有任何缺点? (性能、向后兼容性等)?如果没有,那么我会要求他们启用此功能。
否则,在这种情况下我能做些什么来保护我的数据库和 session 数据?
最佳答案
只要您的代码以共享网络用户的身份运行,存储在服务器上的任何内容都将容易受到攻击。任何其他用户都可以编写 PHP 脚本来检查服务器上的任何可读文件,包括您的数据和 PHP 代码。
如果您的托管服务提供商允许,在不同用户下将 PHP 作为 CGI 运行会有所帮助,但我预计性能会受到显着影响,因为每个请求都需要创建一个新进程。 (您可以将 FCGI 视为性能更好的替代方案。)
另一种方法是根据用户提供的内容设置 cookie,并使用它来加密 session 数据。例如,当用户登录时,获取用户名、密码(由他们提供)和当前时间的哈希值,使用哈希值加密 session 数据,设置包含哈希值的 cookie。在下一个请求中,您将取回 cookie,然后可以使用它来解密 session 数据。但是请注意,这只会保护当前 session 数据;您的用户表、其他数据和代码仍然容易受到攻击。
在这种情况下,考虑到它提供的安全性降低,您需要决定是否可以接受共享托管的低成本权衡。这将取决于您的应用程序,与其试图想出一种复杂的(甚至可能不是很有效的)方法来增加安全性,您最好还是接受风险。
关于php - 在 PHP 共享主机上保护数据库和 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/131017/
我在这里想做的是将所有连接转发到机器一上端口 3306 上的本地主机到本地主机上端口 3306 上的机器二。因此,如果您连接到机器一上的 mysql,它的行为就像您正在连接一样在二号机器上。 我认为
通过Kibana界面,如何获得 flex IP /主机? 我的意思是,与kibana连接的Elastic主机。 那有可能吗?我在这个上挣扎了好几个小时,却一无所获:( 附:不确定此问题是否是题外话,应
我知道这听起来很奇怪,但我有一个情况,Deno 需要关闭自己的主机(并因此杀死自己的进程)。这可能吗? 我特别需要这个用于 linux (lubuntu),如果相关的话。我想这需要 sudo 权限,这
我知道这听起来很奇怪,但我有一个情况,Deno 需要关闭自己的主机(并因此杀死自己的进程)。这可能吗? 我特别需要这个用于 linux (lubuntu),如果相关的话。我想这需要 sudo 权限,这
我有一个基本问题,但谷歌并没有为我产生很多结果(反正不是英文的)。基本上我想做的就是: 我有一个图形需要用作整个应用程序的持久 header ,例如:我不能让它在新的 Intent 调用时从屏幕上滑出
您好,我正在使用 xampp,我正在尝试使用 php 进行连接。 $sql_connections = mysql_connect("$server, $username, $password")
我目前正在尝试一些多人游戏的想法,并正在尝试创建一个 Java 应用程序来为基于网络浏览器的多人游戏提供服务。 我的开发环境是主机上的Eclipse, native 上的notepad + Googl
今天为大家分享一篇关于SSH 的介绍和使用方法的文章。本文从SSH是什么出发,讲述了SSH的基本用法,之后在远程登录、端口转发等多种场景下进行独立的讲述,希望能对大家有所帮助。 什么是SSH?
我已经完成了在裸机 Centos 7 上运行的测试 Kubernets 主机的设置。这将用作测试系统,因为我们将在 IBM Bluemix Kubernetes 服务中部署所有内容。 从 Bluemi
我正在尝试通过带有 4.2(果冻 bean )的 android 设备“nexus 7”通过 USB 与我的 freeduino 板进行通信,该板类似于 arduino uno。 几个月后,我使用开发
我正在使用 nginx,但在设置反向代理时遇到问题。 我的 nginx.conf 是默认的(没有对其进行任何更改),我的站点可用配置是: upstream backend_hosts { se
我在 projectlocker(免费 svn 主机)上有一个帐户,但我不知道如何将我的项目文件上传到它。 我在我的仪表板中找不到任何选项。 我在我的电脑上使用tortoiseSvn,那么如何上传文件
设置batchSize = 1有意义吗?如果我想一次处理一个文件? 尝试过batchSize = 1000和batchSize = 1 - 似乎具有相同的效果 { "version": "2.0"
我只想知道.. docker中现在有任何可用的工具吗?我已经阅读了Docker中有关多主机功能的一些文档,例如, Docker群 Docker服务(带有副本) 我也知道群模式下的volume问题,容器
我想将文件从 Docker 的容器挂载到我的 docker 主机。 数据卷不是我的解决方案,因为它们是从 docker 主机到 docker 容器的装载,我需要相反的方法。 谢谢 最佳答案 当 doc
我是新手。我无法正确理解RMI。互联网上有大量教程,但据我所知,它们都是针对本地主机的。服务器和客户端都运行在同一台机器上。 我想在任何计算机上运行客户端,并且主机将位于一台计算机上,让我们考虑IP
我无法从客户端“A”SSH 到服务器“B”(但我可以从同一子网上的许多其他 ssh 客户端而不是“A”——所有都是 *nux 机器) serverA>ssh -v -p 端口用户@serverB Op
设置batchSize = 1有意义吗?如果我想一次处理一个文件? 尝试过batchSize = 1000和batchSize = 1 - 似乎具有相同的效果 { "version": "2.0"
由于我不是天生的编码员,请多多包涵。 这是我尝试使用HAproxy来实现的目标,但是经过数小时的检查后,我无法以某种方式使其工作。 从 domain.com/alpha domain.com/beta
我正在使用 tomcat 运行 Java Web 应用程序,通过电子邮件将生成的报告发送给用户。我可以发送电子邮件,但几个小时后服务器停止发送电子邮件,并出现以下错误。 javax.mail.Mess
我是一名优秀的程序员,十分优秀!