设置mySql server和Xampp现在需要了解基本的安全性
Posted
技术标签:
【中文标题】设置mySql server和Xampp现在需要了解基本的安全性【英文标题】:Set up mySql server and Xampp now need to understand basic security 【发布时间】:2019-03-10 11:41:31 【问题描述】:再次,我问的是最基本的问题......
我奇迹般地安装了 mysql 服务器并使用 Workbench 应用程序创建了我的第一个表。在一周内,我已经学会了足够多的 php 来制作一个如此脆弱的应用程序,我将它扔掉并重新开始。我想将开发转移到我的本地机器上,所以我只是让 Xampp 运行并用它来启动 mySql 服务器没有任何问题。我怎么可能在不输入凭据的情况下启动服务器?我使用 Workbench 设置了 mySql Server 密码。我还没有在服务器上使用命令行。我使用 chrome 打开了 localhost,它显示了一个 IP 地址。关于基本安全,我接下来需要做什么?感谢您抽出宝贵时间阅读本文。
【问题讨论】:
【参考方案1】:怎么可能我没有进入就启动了服务器 凭据?
服务器与其他任何程序一样只是一个可执行程序,并且受操作系统文件系统提供的安全性衡量。大多数系统将用户分为user
或admin
等组,属于每个组的人具有不同的权限,admin
拥有更多权限。因此,您需要在运行服务器的计算机上设置允许和不启动服务器的人。通常,用户/组可以配置为“无访问”、“读取访问”、“写入访问”或“执行访问”或这些的一些有意义的组合。您需要阅读此内容。
在基本安全方面,我接下来需要做什么?
如果配置正确,您的 SQL 服务器将允许或拒绝来自您已配置的用户的连接。假设配置正确,这将有很大帮助,但您需要通过以不同用户身份登录或更改 PHP 中的连接字符串来进行测试。
对于 PHP 和 SQL,其真正容易受到“SQL 注入”攻击。当用户在表单中输入可执行的 SQL 语句时,就会发生这种情况。您可以通过始终使用准备好的声明来避免这种情况——我故意大喊大叫!如果您不知道“准备好的 SQL 语句”,请阅读,但这意味着(简单地说)是您在一个命令中将模板 SQL 语句发送到 SQL 服务器,并在稍后的命令中发送搜索参数。这阻止了注入攻击,因此您的 PHP 脚本永远不会执行在表单中输入的完整 SQL 语句。
我建议先完成这些事情,然后根据您的具体需求进一步加强。
【讨论】:
谢谢。我想知道使用具有管理员权限的用户帐户是否允许我启动服务器。我没有在这台机器上设置多个用户帐户,所以我想这不是问题。所以mySQL的密码保护是针对数据库的读写,与启动和停止服务器无关,对吗?我没想到这是有道理的。因此,为了测试我的服务器的安全性,我需要有人使用该 IP 地址并从我的防火墙的另一端登录,对吗?我正在尝试理解准备好的陈述。 是的,以管理员权限启动服务器。事实上,它很容易设置,它会在通电时自动启动。请记住,SQL 名称/密码和用户组与您的计算机登录完全不同。因此,您可以通过编写具有多个连接请求的程序来测试 SQL 登录安全性。塞缪尔的回复有一个准备好的陈述的例子。【参考方案2】:基础知识
让我们了解 PHP 的工作原理;当您编写 PHP 代码时,即位于 <?php ... ?>
中的代码,它将在服务器上执行,在这种情况下是您的 XAMPP 实例。
这意味着每当用户访问该网站时,他/她将无法真正看到您编写的代码,而是看到该代码的呈现。
渲染可以是echo
、print_r
、var_dump
之后的任何内容,或者您的 PHP 括号之外的任何内容。
当连接到您的数据库时,您可以采取某些步骤来保护它,但实际上没有必要。看看 Laravel 的 Eloquent 系统就知道了。您的实际数据库信息完全存储在您的 .env
文件中。
示例
现在,在考虑安全性的情况下进行开发时,您必须小心,有一些重要的规则需要牢记:
-
始终过滤用户输入
这个应该是给定的;但是一个新网站日复一日地被黑客入侵,因为输入没有被正确过滤,允许任何人将代码注入脚本 - 无论是在 SQL 实例还是前端 javascript 代码。
一个很好的方法是总是投射你真正想要的东西; PHP 是一种弱类型语言。这意味着'1' == 1
。 ('1'
是字符串,1
是整数)
绕过此问题的一种方法是在处理用户输入时使用casting types。了解您在数据库中需要什么。无论是字符串、整数还是布尔值。这将允许您确定仅使用正确的类型发出数据库请求。
例如:
$var = (integer) 'Hello';
var_dump($var); // returns `int(0)`
-
使用准备好的语句
它们并不难,而且它们在安全性方面非常基础 - 这是使用来自用户的数据而不直接将其插入到您的 SQL 查询之一的最佳方法之一。
一个非常糟糕的查询示例:
$sql = 'SELECT * FROM users WHERE id = ' . $id;
$query = $connection->query($sql);
你应该选择做的是:
$sql = 'SELECT * FROM users WHERE id = ?';
$stmt = $connection->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();
请read more here。
最后的想法
您似乎还是编程新手。很高兴您关注安全性,因为它是出色 Web 应用程序最重要的支柱之一。但是,我的最终建议是让您从基础开始。了解 PHP 的文化,了解并了解 PHP 的工作原理,然后在安全方面您将能够取得更多成就。
与 PHP 一起了解 Apache 以及如何发出请求,彻底了解 HTTP 请求,这将使您更好地了解构建安全应用程序时必须考虑的所有因素。您可能拥有世界上最棒的 PHP 代码,但如果您的 HTTP 协议没有使用 SSL,那么任何发往您服务器的请求都在 plaintext
中,全世界都可以看到。
【讨论】:
另外,当您使用 php 进行任何操作时,您的页面将重新加载。但是有一个答案,您可能想了解稍后称为 AJAX 的内容 @Samuel 感谢您花时间解释。您关于 PHP 安全性的 cmets 与我在网上阅读的各种文章一致,很高兴知道我正在阅读的关于准备好的语句和过滤的内容并不是过时的信息。我读了一篇关于 Laravel Eloquent 的文章并了解了它的要点,但我太无知了,无法理解它会给我带来什么好处。 @bakero98 这是我可以与 PHP 结合使用的东西,还是更多的替代方案?是否存在类似的安全风险? @Bret.burrill 没问题!我知道安全是一个难以解决的问题。但随着经验,它会来;经验比什么都重要。以上是关于设置mySql server和Xampp现在需要了解基本的安全性的主要内容,如果未能解决你的问题,请参考以下文章