我有一个客户,并且他已经报告了5/6次,该网站已经以某种方式返回到未发布的模式。我们不确定是什么原因造成的,一般情况下,当没有人在网站上工作时就会发生这种情况。他们确实有一些过去的人,可能仍然有恶意的意图使网站失效(所以这也可能是一个问题)。
Umbraco中是否存在任何已知的安全问题,用户可能会恶意取消发布整个网站?
Umbraco有没有可能导致这种情况发生的错误?
Umbraco是否检查数据库中是否有已发布的标志,或者只是在选择显示“还有更多工作要做”消息之前检查是否存在XML文件?
答案 0 :(得分:3)
您要引用的消息存在于/install/noNodes.aspx文件中。
这表明该网站或至少该网站的主页未发布。这表示某人或进程正在取消发布该网站或主页。首先,我会检查“属性”标签中主页上没有设置“取消发布”日期。
同时检查Umbraco日志以检查是谁取消发布哪些节点以及何时发布。您还可以查看主页的审核历史记录,以查看是谁编辑的。
如果您怀疑有恶意,那么在考虑Umbraco的安全问题之前,您需要确定自己的安全性。您需要考虑更改服务器RDC,SQL的sa和任何Umbraco特定密码的密码。
答案 1 :(得分:2)
在较早版本的Umbraco中,一旦发生这种情况,该网站将保持这种状态,直到它被重新发布 - 这似乎已经修复(我不确定从哪个版本)。如果您遇到这种情况并且升级不是一个选项,那么解决方法是将以下代码放在/config/splashes/noNodes.aspx的顶部:
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Server.ScriptTimeout = 100000;
var cacheFile = IOHelper.MapPath("/App_Data/umbraco.config");
try
{
var r = XmlReader.Create(cacheFile, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Ignore });
var d = new XmlDocument();
d.Load(r);
var n = d.SelectSingleNode("//root");
r.Close();
if (n.ChildNodes.Count == 0)
{
Response.Write("Republishing Site......");
Response.Flush();
}
else
{
Response.Write("Site Was Already Published......");
return;
}
}
catch (Exception ex)
{
Response.Write(ex.Message);
Response.Write("Cache missing, republishing.....");
Response.Flush();
}
Document.RePublishAll();
library.RefreshContent();
Response.Write("Completed");
Response.Flush();
Response.Redirect("/");
Response.End();
}
</script>
(这段代码原本不是我的 - 我不记得我从哪里得到它)。代码尝试重新发布该站点,以便一旦数据库连接再次可用,该站点就会重新启动。
您可能还想编辑/config/splashes/noNodes.aspx的内容,以向您的用户显示更合适的网站维护或错误消息。
您是否了解客户网站遭受此类攻击时的任何计划数据库维护?如果没有,您可能需要查看他们的托管。
答案 2 :(得分:1)
我会回应Digbyswift所说的一切,此外,网站页面实际上在后台显示为未发布?如果它们似乎仍然被发布(即它们不是灰色的)但它们没有显示在前端,那么有人可能已在属性选项卡中设置了未发布日期。如果它是灰色的,那么有人可以通过后台办公室实际取消发布它。
如果它显示为已发布,但前端没有任何内容,那么cmsContentXml表也可能出现问题。发生这种情况时,请检查此表中是否有记录。如果没有,该站点将认为它是空的,因为站点XML缓存从站点启动时从此表重建。如果表是空的,则某人或某物正在清除它不应该是。
如果您怀疑是恶意用户,请重置系统的所有密码(后台用户,AND数据库),并确保有权访问CMS的每个人都有自己的用户名和密码(并确保他们不知道每个用户和密码)其他的详细信息),这样您就可以使用审计跟踪将更改固定到特定用户。