设置mysql服务器和xampp现在需要了解基本的安全性

pkwftd7m  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(373)

再一次,我在问最基本的问题。。。
奇迹般地,我安装了mysql服务器,并使用workbench应用程序创建了我的第一个表。在一个星期里,我已经学会了足够的php,使一个应用程序是如此脆弱,我扔掉它,重新开始。我想把开发转移到我的本地机器上,所以我刚刚运行了xampp,并用它来启动mysql服务器,没有任何问题。我怎么可能在没有输入凭据的情况下启动服务器?我使用workbench设置mysql服务器密码。我还没有对服务器使用命令行。我用chrome打开localhost,它显示了一个ip地址。关于基本安全,我下一步需要做什么?感谢您抽出时间阅读本文。

hgb9j2n6

hgb9j2n61#

基础知识

让我们了解php是如何工作的;当你编写php代码时,意味着代码生活在 <?php ... ?> ,它将在服务器上执行,在本例中是您的xampp示例。
这意味着,每当用户访问该网站时,他/她将无法实际看到您编写的代码,相反,他们将看到该代码的呈现。
渲染之后的任何东西 echo , print_r , var_dump ,或在php括号外。
当连接到您的数据库时,您可以采取某些步骤来保护它,但是,这并不是必须的。别再看拉威尔的雄辩系统了。您的实际数据库信息完全存储在 .env 文件。

示例

现在,在考虑安全性的情况下进行开发时,您必须小心,要记住以下重要规则:
总是筛选用户输入
这一个应该是一个给定的;但是一个新网站每天都会被黑客入侵,因为输入没有被正确过滤,任何人都可以将代码注入到脚本中——不管是在sql示例还是前端javascript代码中。
一个很好的方法就是总是投下你真正想要的东西;php是一种弱类型语言。这意味着 '1' == 1 . ( '1' 是字符串,并且 1 是整数)
绕过此问题的一种方法是在处理用户输入时强制转换类型。知道你的数据库需要什么。无论是字符串、整数还是布尔值。这将允许您确定数据库请求只使用正确的类型。
例如:

$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();

请在这里读更多。

最后的想法

你似乎还是个编程新手。很高兴您关心安全,因为它是一个伟大的web应用程序最重要的支柱之一。不过,我的最终建议是让你从基础开始。学习php的文化,了解并理解php的工作原理,然后当涉及到安全性时,您将能够实现更多。
与php一起学习apache,以及如何发出请求,彻底理解http请求,这将使您更好地理解在构建安全应用程序时必须考虑的问题。您可能拥有世界上最棒的php代码,但是如果您的http协议不使用ssl,那么任何发送到服务器的请求都是无效的 plaintext 让全世界都看到。

elcex8rz

elcex8rz2#

我怎么可能在没有输入凭据的情况下启动服务器?
服务器和其他任何程序一样只是一个可执行程序,并且受操作系统文件系统提供的安全性的影响。大多数系统将用户划分为以下组: user 或者 admin ,并且属于每个组的人具有不同的特权 admin 有更多的特权。因此,您需要在运行服务器的计算机上设置允许和不允许谁启动服务器。通常,可以将用户/组配置为“无访问”、“读访问”、“写访问”或“执行访问”或这些有意义的组合。你得好好看看。
关于基本安全,我下一步需要做什么?
如果配置正确,您的sql server将允许或拒绝来自用户的连接,就像您已经配置的那样。如果配置正确,这将有很大帮助,但是您需要以不同的用户身份登录或在php中更改连接字符串来进行测试。
关于php和sql,其真正易受“sql注入”攻击。当用户在表单中输入可执行的sql语句时,就会发生这种情况。你可以通过使用事先准备好的语句来避免这种情况——我故意这么说!如果您不知道“prepared sql statements”,那么请仔细阅读,但这意味着(简单地说)您可以在一个命令中将模板sql语句发送到sql服务器,并在稍后的命令中发送搜索参数。这将阻止注入攻击,因此php脚本永远不会执行在表单中输入的完整sql语句。
我建议先把这些事情做好,然后根据你的具体需要进一步收紧。

相关问题