Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在web应用程序中存储硬编码域名的最佳选择_Html_Code Analysis_Fortify - Fatal编程技术网

Html 在web应用程序中存储硬编码域名的最佳选择

Html 在web应用程序中存储硬编码域名的最佳选择,html,code-analysis,fortify,Html,Code Analysis,Fortify,我有一个web应用程序,其中我引用了带有域名的文件名。我可以在哪里添加这些域名并从中调用它们。当我运行像fortify这样的工具来检查安全问题和标准时,它总是警告我不要保留硬编码的域名。什么是最好的选择,比如在哪里可以从web应用程序端(而不是db)存储和检索这些主要域名 我正在使用visual studio,正在开发asp.net核心mvc应用程序。 下面是一个示例 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.c

我有一个web应用程序,其中我引用了带有域名的文件名。我可以在哪里添加这些域名并从中调用它们。当我运行像fortify这样的工具来检查安全问题和标准时,它总是警告我不要保留硬编码的域名。什么是最好的选择,比如在哪里可以从web应用程序端(而不是db)存储和检索这些主要域名

我正在使用visual studio,正在开发asp.net核心mvc应用程序。

下面是一个示例

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.1.221/styles/kendo.common.min.css" />

其他例子

<environment exclude="Development">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />

    </environment>

首先,您可以在自己的服务器上托管文件并使用相对路径

如果不可行,您将需要一些系统来动态更改这些依赖项的URL,您可以从环境变量或配置文件中获取它们?DB是一个不错的来源


如果要包含来自CDN的文件,则应使用以确保在文件被修改时不会加载该文件


我怀疑SCA仍然会标记那些在外部域上的漏洞,在这种情况下,如果您不打算改变这种方法,您可以审计这些漏洞。

在PHP MVC world中,实现这一点的方法之一是通过一个包含所有外部URI的库类。更容易管理,因为您知道在哪里查找断开的链接。此外,使用“//”而不是http://或https://也是一种很好的做法

class External_uri
{
  public function __construct()
  {
    parent::__construct();
  }

  public function get_external_uri($name)
  {
    $uri = [
      'bootstrap_css'     => '//ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css',
      'font_awesome_css'  => '//stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css',
      'kendo_common_css'  => '//kendo.cdn.telerik.com/2018.1.221/styles/kendo.common.min.css',
    ]

    return $uri[$name];
  }
}
并称之为:

$this->External_uri->get_external_uri('bootstrap_css');

使用Fortify等工具处理安全警告时,了解警告背后的原因非常重要,这样您就可以正确地缓解警告

HTML警告中的硬编码域

Fortify对“HTML中的硬编码域”警告的推理是,链接到外部域会损害您站点的安全性,因为您链接的文件可能会更改。以下内容摘自“强化分类法:软件安全错误”:

摘要

包含来自其他域的脚本意味着此网页的安全性取决于其他域的安全性

解释

包括来自另一个网站的可执行内容是一个危险的提议。它将您站点的安全性与其他站点的安全性联系起来

示例:考虑下面的<代码> <代码>标签> < /P>

<script src="http://www.example.com/js/fancyWidget.js"/>
理想情况下,Fortify应支持SRI作为一种有效的缓解技术,但如果他们不支持,他们仍将标记这些错误,您需要手动检查并传递任何已缓解的此类警告

  • 参考:
最佳选择

“最佳”选项取决于您的需求。以下是一些想法:

  • 如果您正在运行商业服务,并且需要您的站点在您的控制下运行,那么您自己提供文件可能是最佳选择,因为您不仅可以控制安全性,还可以控制可用性。关于可用性,如果您使用的是远程站点,而远程站点不可用,则您的站点可能不再正常工作。即使你自己托管这些文件,你仍然应该使用SRI,以防你自己的文件被破坏
  • 如果您运行的是一个非商业或小型商业站点,那么可以将CDN与SRI一起使用,因为它允许您在不要求您托管文件的情况下强制执行安全性。缺点是,如果更改或消失,您的站点可能无法工作

默认情况下,我通常将文件托管在服务器上,并像这样引用它:

<link rel="stylesheet" href="~/Content/font-awesome/4.7.0/css/font-awesome.min.css">

如果他们的站点宕机或SSL证书无效,这非常方便。有些站点不使用版本控制,在服务器上本地保存副本可以避免新版本破坏现有代码或影响其外观。在本地服务器上添加它还可以避免外部版本被恶意版本替换

<link rel="stylesheet" href="~/Content/font-awesome/4.7.0/css/font-awesome.min.css">