云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

美国服务器_企业邮箱注册_0元

小七 141 0

共享云存储_个人_数据库备份到本地

有时作为开发人员,很难跟上不断变化的框架、工具和版本。你花了很多时间来修复错误,重构,坦白地说,只是想让你的代码运行起来。可以理解,很多事情都被推到了冗长的积压列表中。但是,你的应用程序的安全性是否应该出现在这个列表中呢?简单的回答是"不",那么你如何在保证安全的同时,跟上你所有其他任务的进度呢?最简单的方法是花一些时间了解常见的漏洞,然后将预防作为开发过程的一部分。你建立的形式是有效的,但却让你容易受到攻击?那就没用了。幸运的是,一些最常见的攻击实际上并不需要太多额外的工作来预防。在本文中,我将讨论一些最常见的直接影响开发人员的漏洞,以及如何进行简单的更改来防止这些漏洞。这不是一个详尽的清单,但这是一个很好的开始。如果你想跟进了解更多的漏洞,请在下面留下评论,让我知道。如果您在桌面上,可以使用左边的菜单跳过您感兴趣的漏洞。我们开始吧!注入您可能听说过SQL注入,这是最常见的攻击之一,但是攻击者可以利用其他几种类型的注入。所有这些攻击都源于一件事:没有正确处理用户提交的数据。让我们看两个注入攻击的例子。服务器端注入要了解利用服务器端代码注入攻击易受攻击的应用程序有多容易,请查看PHP eval()函数。eval()—将字符串计算为PHP代码的PHP函数此函数可以接受用户提交的输入并将其作为代码运行。这是非常危险的,特别是如果不采取适当的预防措施。让我们看一个假设的计算器应用程序。计算器让用户输入一些方程式,然后它将输出结果。例子$userExpression='5+3';echo eval('return'。$userExpression.';');太好了!用户提交他们的输入,大数据是干嘛的,计算器使用eval()来求解方程,然后返回正确的值:8。但是当一个不太友好的用户决定要从计算器中得到更多的东西时,会发生什么呢?$userExpression='phpInfo();5+3';echo eval('return'。$userExpression.';');由于没有输入验证,用户可以输入任何他们想要的内容,并且它将作为PHP代码进行评估和运行。您可以使用PHP沙盒亲自尝试,您将看到PHP配置信息被打印出来。如果攻击者可以运行任何他们想运行的代码,他们就可以对您的应用程序造成严重破坏。我们将很快讨论一些预防技术,但一个好的开始是永远不要直接执行来自用户的输入。SQL注入SQL注入(SQLi)是另一种常见的攻击,可以很容易地预防,但在开发过程中也很容易被忽略。要执行SQLi攻击,企业交流软件,用户将在发送到应用程序的输入中添加一个SQL查询。如果应用程序对此没有保护措施,它将执行用户提交的查询,这可能会对应用程序的数据库造成大规模破坏。例子此攻击的一个常见示例是有人通过对登录表单运行攻击来访问用户凭据。当然,这将是毁灭性的,但是如果攻击者的目标是一些看起来不那么敏感的数据呢?也许当开发人员创建表单时,他们并没有想到要为它添加足够多的保护,因为它没有泄漏用户凭据的严重性。这仍然是毁灭性的。让我们看看。假设您有一个网站,允许用户通过在表单中输入订单号和电子邮件地址来检查他们的订单信息。根据表单输入获取订单信息的查询如下所示:从订单中选择*,其中$email=$\u POST['email']和$id=$\u POST['order_number'];用户输入他们的订单号和电子邮件,然后使用这些输入执行查询以从数据库中提取数据。但现在一个不太友好的用户来了,决定要拉每个人的订单。他们不只是在电子邮件中键入,而是键入以下值作为输入:电子邮件:test@example.com网站'或1=1--']订单号:1现在,大数据是数据,应用程序获取该输入并将其直接放入SQL字符串中。这就是被执行的内容:SELECT*FROM orders WHERE email='test@example.com网站'或1=1--']且id=1;结果呢?攻击者现在掌握了所有人的订单信息。这可能意味着姓名、电子邮件、地址等等。怎么了?由于最终用户在输入框中键入的任何内容都是作为SQL执行的,因此他们能够将一个额外的条件链接到查询中,即1=1,该查询的计算结果始终为true。查询的其余部分确实包含AND运算符,但攻击者将其注释掉。即使他们没有在最后添加评论,他们仍然可以传递任何订单号并接收订单数据,即使他们没有正确的电子邮件。新闻中的攻击2018年,联想遭遇数据泄露,影响了100多万客户。黑客利用SQL对联想的网站进行了全面的攻击。"…黑客们能够在网上找到一个产品ID,这使他们意外地进入了一个错误页面。然后,利用这个错误页面,黑客开始输入一系列查询字符串,最终授予他们对网站及其所有内容的完全管理员级访问权限,据称数据超过20 GB。"-Roguemedia.co.公司SQL注入不仅限于窃取数据库。另一个问题是数据完整性。如果攻击者有权访问数据库,他们可以通过修改数据库中的数据来造成很大的损害。但是,攻击者可以从更改数据中获得什么呢?考虑以下两种假设情况:攻击者可以访问包含敏感用户信息的医疗保健数据库。他们修改这些信息并保留原始数据库。这家医疗保健公司甚至可能不会注意到这些变化,大数据学什么,大数据好就业吗,直到为时过晚。然后,攻击者在恢复更改之前要求赎金。攻击者访问一个流行的加密货币交换的数据库。他们操纵网站上显示的货币价值。这可能导致大规模买进或抛售,最终可能根据攻击者的目标将大量资金投入攻击者的口袋。如您所见,在应用程序中留下可能导致数据渗透的漏洞可能会在多个方面造成损害。预防幸运的是,避免这些情况相当简单。用于防止SQL注入和代码注入的方法基本相同。你需要关注两件事:始终验证和清理用户输入不要直接执行用户输入生成应用程序时,不应信任用户输入在推特上留言您应该做的第一件事是验证来自用户的任何输入。如果您希望输入是一个整数,那么一定要检查它。如果您希望它是某种格式,请检查它。大多数语言都有内置的验证规则或包,您可以添加这些规则或包来简化此过程。最重要的是,如果您接收到一些不是您期望的输入,请拒绝它并返回错误消息。您可能决定聪明一点,尝试只修改输入以删除危险字符,但这样做会有太多的错误。例如,如果您需要一个字符串,那么您可能决定去掉所有标记,然后信任其余的字符串。但是如果攻击者做了这样的事情呢:当您解析字符串并删除开始和结束标记时,得到的字符串将变成有效的JavaScript!同样,如果您接收到无效的输入,只需拒绝它并返回一条错误消息。预防的第二部分是永远不要直接执行用户输入。在SQL查询中避免这种情况的最常见方法是使用预处理语句或参数化查询。让我们在上面的SQL注入示例的上下文中看看这意味着什么。从订单中选择*,其中$email=$\u POST['email']和$id=$\u POST['order_number'];您可以创建如下参数化查询,而不是像上面所示直接将用户输入插入查询中://创建mysql连接$db_connection=new mysqli('host','user','password','db');//用户输入电子邮件[$u];$id=$_POST['订单号'];//创建准备好的语句$ps=$db_connection->prepare("SELECT*FROM orders WHERE email=?和id=?");$ps->bind_param("si",$email,$id);$ps->execute();此语句定义将用于查询的模板。在执行语句之前定义查询。bind_param()中的si参数表示需要字符串和整数。然后email和id参数将正确转义并替换查询中的问号,以便它们不能作为SQL执行。在上面的攻击中,它会变成:SELECT*FROM orders WHERE email='test@example.com网站或1=1--]'且id=1;就这样,您阻止了SQL注入。跨站点脚本(XSS)跨站点脚本(XSS)是一个漏洞,攻击者可以通过表单或URL发送恶意代码,这些代码将在最终用户的浏览器上运行。从技术上讲,这是一种注入,但由于是客户端攻击,因此这种攻击的后果略有不同。这里最大的区别在于,如果有人成功地对易受攻击的应用程序执行XSS攻击,他们就能够访问合法用户的数据和浏览器信息,而不仅仅是访问应用程序数据。让我们看看这是怎么发生的。例子假设你在搜索