我一直避免学习PHP和MySQL,因为我在互联网上读过有关PHP不是安全语言的内容以及数据库的安全风险(SQL注入等)。
我想要了解的主要内容是通常由糟糕的PHP / MySQL代码引起的损坏类型。换句话说,当编写糟糕的代码,数据库或整个服务器中的信息时,我们会冒什么风险呢?
我知道这可能是一个复杂的主题,但我只想简要解释一下数据库或PHP脚本遭到入侵时通常会影响哪些信息。
当数据库遭到入侵时,这是否意味着整个服务器可能存在风险,或仅仅是数据库及其内容?
当PHP脚本遭到入侵时,这是否意味着整个服务器可能存在风险,或者只是脚本和任何内容相关?
创建数据库时,保持安全最重要的是什么,与数据库的连接是什么?
很抱歉这些基本问题,但在继续之前我需要先了解这一点。
答案 0 :(得分:2)
在SQL注入...当数据直接连接到命令时,可能会将数据混淆为命令。几乎任何事情都是如此,但我们在Web应用程序的SQL注入攻击形式中看到了很多。例如:
$evil_user_input = '0; DELETE FROM someTable WHERE 1=1';
mysql_query('SELECT * FROM someOtherTable WHERE fieldA = ' . $evil_user_input);
实际上,你一次只能运行一个查询,所以你必须变得狡猾,但这里的重点是,如果没有逃避SQL的使用,那么数据应该是多么模糊。这超出了安全范围。假设您有一个用户键入引号的字段。现在你已经破坏了SQL,你的代码崩溃了。
1-当数据库遭到入侵时,这是否意味着整个服务器可能存在风险,或仅仅是数据库及其内容?
2-当PHP脚本遭到入侵时,这是否意味着整个服务器可能存在风险,或仅仅是脚本和任何内容相关?
现在,当数据库遭到入侵,或者您的脚本遭到入侵时,无法概括问题是什么。这一切都取决于攻击是什么。你无法确定任何事情都是真正孤立的,因为许多攻击都依赖于许多部分。当某些事情发生时,你需要使用你的日志和其他证据来弄清楚发生了什么,然后修复它。
3-创建数据库时,保持安全最重要的是什么?与数据库的连接是什么?
正确使用预准备/参数化语句,您不必担心SQL注入攻击。与数据库服务器本身的连接应该通过安全隧道。大多数数据库有线协议本身并不安全......它们是为了速度而构建的。如果您通过localhost访问数据,则不需要隧道。