From 0b925e9b700a810b83f05d91cc387548879ee39d Mon Sep 17 00:00:00 2001 From: Alexandre Dulaunoy Date: Tue, 29 Sep 2026 15:18:41 +0200 Subject: [PATCH] Serve tip of the week data locally --- layouts/partials/tip-of-the-week.html | 2 +- static/data/misp-tip-of-the-week.json | 55 +++++++++++++++++++++++++++ static/js/tip-of-the-week.js | 7 +++- 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 static/data/misp-tip-of-the-week.json diff --git a/layouts/partials/tip-of-the-week.html b/layouts/partials/tip-of-the-week.html index b17d0e26..a1788af3 100644 --- a/layouts/partials/tip-of-the-week.html +++ b/layouts/partials/tip-of-the-week.html @@ -19,4 +19,4 @@

A useful tip from the MISP community

- + diff --git a/static/data/misp-tip-of-the-week.json b/static/data/misp-tip-of-the-week.json new file mode 100644 index 00000000..ecc59cfd --- /dev/null +++ b/static/data/misp-tip-of-the-week.json @@ -0,0 +1,55 @@ +{ + "source": "https://github.com/cudeso/misp-tip-of-the-week", + "tips": [ + { + "title": "Protect your API key", + "tip": "Treat your MISP authentication key like a password: never put it in source code, screenshots, tickets, or chat messages. Use a secrets manager or an environment variable, and rotate the key if it may have been exposed.", + "url": "https://www.misp-project.org/best-practices-for-misp-api-key-management/" + }, + { + "title": "Use warninglists before acting on indicators", + "tip": "Enable and regularly update MISP warninglists. They help analysts spot indicators that are likely to be benign, broadly shared, or otherwise unsuitable for automatic blocking.", + "url": "https://github.com/MISP/misp-warninglists" + }, + { + "title": "Add context with taxonomies", + "tip": "Apply taxonomy tags to describe confidence, sharing restrictions, workflow state, and threat context consistently. Machine-readable tags make events easier to filter and automate.", + "url": "https://www.misp-project.org/taxonomies.html" + }, + { + "title": "Model related attributes as objects", + "tip": "Use MISP objects when several attributes describe one thing, such as a file, email, or network connection. Objects preserve the relationship between the attributes and make the data easier to reuse.", + "url": "https://www.misp-project.org/objects.html" + }, + { + "title": "Review distribution before publishing", + "tip": "Check the event and attribute distribution settings before publishing. Choose the narrowest sharing scope that still reaches the intended community, especially for sensitive information.", + "url": "https://www.misp-project.org/datamodels/" + }, + { + "title": "Use sightings to keep intelligence current", + "tip": "Record sightings when an indicator is observed, no longer observed, or determined to be a false positive. Sighting information helps the community assess relevance without duplicating events.", + "url": "https://www.misp-project.org/datamodels/" + }, + { + "title": "Prefer proposals when suggesting changes", + "tip": "Use proposals to recommend changes to another organisation's event. The event owner can review the suggestion without collaborators silently replacing the original information.", + "url": "https://www.misp-project.org/documentation/" + }, + { + "title": "Keep feeds selective", + "tip": "Filter feeds to the use cases your organisation can act on. A smaller, relevant dataset is usually more valuable than importing every available indicator.", + "url": "https://www.misp-project.org/feeds/" + }, + { + "title": "Publish complete events", + "tip": "Add a clear event title, an informative analysis state, dates, tags, and references before publishing. Good context helps recipients understand why the indicators matter.", + "url": "https://www.misp-project.org/datamodels/" + }, + { + "title": "Automate with PyMISP", + "tip": "Use PyMISP rather than building raw HTTP requests for Python integrations. It provides maintained helpers for authentication, events, attributes, objects, searches, and error handling.", + "url": "https://github.com/MISP/PyMISP" + } + ] +} diff --git a/static/js/tip-of-the-week.js b/static/js/tip-of-the-week.js index fb90b555..ba25bacb 100644 --- a/static/js/tip-of-the-week.js +++ b/static/js/tip-of-the-week.js @@ -1,7 +1,8 @@ (function () { "use strict"; - var sourceUrl = "https://raw.githubusercontent.com/cudeso/misp-tip-of-the-week/main/misp-tip-of-the-week.json"; + var scriptElement = document.currentScript; + var sourceUrl = scriptElement && scriptElement.dataset.tipsUrl; var repositoryUrl = "https://github.com/cudeso/misp-tip-of-the-week"; var titleElement = document.getElementById("tip-of-the-week-title"); var textElement = document.getElementById("tip-of-the-week-text"); @@ -14,6 +15,10 @@ return; } + if (!sourceUrl) { + sourceUrl = "/data/misp-tip-of-the-week.json"; + } + function firstString(object, keys) { for (var i = 0; i < keys.length; i += 1) { if (typeof object[keys[i]] === "string" && object[keys[i]].trim()) {