SafeToOpen Browser Security
Threat Feeds: Bring Your Own Intelligence
Ingest vendor or community URL feeds on a schedule so their entries are blocked in every workspace
Business Plus organisations and MSPs can point SafeToOpen at threat feeds they already licence or trust. On the schedule you choose, SafeToOpen downloads each feed, keeps the entries it has not seen before for your organisation, and adds them to your blocked list with the reason you pick. Entries land under Block/Unblock URLs and are blocked immediately in every workspace of the organisation, so one feed covers all your clients.
1. How it works#
- Console → Configuration → Threat feeds → Add feed. Start from a preset, or describe any address that returns a list.
- Choose how often to read the feed: every 15 minutes, hourly, every 6 hours, daily or weekly. The first run starts within five minutes of saving; Run now starts it at once.
- Each run downloads the feed (25 MB limit), parses it, normalises entries (defanged
hxxp://and[.]forms, bare domains, IP addresses), skips everything already blocked for your organisation, and blocks the rest through the same path as a manual block. New entries per run are capped (default 2,000, maximum 5,000); anything beyond the cap follows on the next run. - The feed row shows the last run, how many entries were read and how many were new, a status (OK, Partial, Error, Paused) and the message behind it. History lists the last twenty runs.
2. Presets#
| Vendor | Lists offered | Needs | Format |
|---|---|---|---|
| abuse.ch URLhaus | Online URLs only (recommended) · recent additions · full database | Free Auth-Key from auth.abuse.ch | Plain text |
| abuse.ch ThreatFox | Recent URLs · all URLs · recent domains | Same Auth-Key | JSON |
| OpenPhish | Community feed · Premium private feed | Nothing for community; your private URL for Premium | Plain text |
| PhishTank | Without application key · with key | Optional application key for a higher rate limit | JSON (large) |
| MISP | Attributes filtered by tags and look-back window | MISP API key | MISP REST search |
| TAXII 2.1 server | Discover collections and pick any number | Credentials for the API root | STIX 2.1 over TAXII |
| STIX 2.1 bundle | One downloadable bundle | Token if the vendor requires one | STIX 2.1 |
| Recorded Future | URL risk list · domain risk list · another list by name | API token with risk-list access | CSV |
| Proofpoint ET Intelligence | Domain reputation · IP reputation | Your oinkcode in the address | Plain text |
| Any vendor | Plain text · CSV · JSON · hosts file | Whatever the vendor requires | Detected automatically or chosen |
Where a vendor publishes several lists, the form shows “Which list from <vendor>” and fills the address, format and a sensible interval for that list. To take more than one list, add the feed once per list.
3. Vendor notes#
abuse.ch (URLhaus, ThreatFox)#
Automated downloads require an Auth-Key. Create a free account at auth.abuse.ch, copy the key, and paste it as the secret; the preset already names the Auth-Key header. Prefer the “online only” or “recent” lists on a short interval; the full database is large and changes slowly, so daily is enough.
OpenPhish and PhishTank#
Both community feeds are public. OpenPhish refreshes every 12 hours, so 6-hourly reads are plenty. PhishTank’s file is tens of megabytes; read it every 6 hours and, if you have an application key, use the keyed address for a higher rate limit.
MISP#
- Address: your instance’s
/attributes/restSearchendpoint. Authentication: API key in a header namedAuthorization(the preset sets this). - Tags: leave blank for all IDS-flagged url, domain and hostname attributes, or list tags to take one feed group, for example a vendor’s feed tag or a TLP level.
- Look back: 1, 7, 30 or 90 days. The first run pulls that window; later runs only add what is new.
TAXII 2.1 (Anomali, EclecticIQ, OpenCTI, Recorded Future, Cisco, Microsoft Sentinel and others)#
- Enter the API root, for example
https://server/taxii2/api1/, and the username and password or token the vendor issued. - Click Discover collections. SafeToOpen asks the server for its collections and lists them with titles and descriptions; collections you cannot read are greyed out.
- Tick the collections you licence and click Add selected collections. One feed is created per collection, named “<feed> · <collection>”, all sharing the interval, reason and credentials you set.
Recorded Future and Proofpoint ET#
Recorded Future risk lists are CSV; the preset reads the Name column and sends your token in the X-RFToken header. Choose the URL or domain list, or edit the list= parameter for another list from your subscription. Proofpoint ET reputation files are plain text; replace <oinkcode> in the address with your subscription code.
Any other list#
- Plain text: one entry per line; lines starting with
#or;are ignored. Bare domains becomehttps://domain/. - CSV: give the URL column by header name or 1-based number.
- JSON: give the dotted path to the array (
*for the document root) and the field that holds the URL. Common field names are found automatically. - Authentication: none, an API key in a named header, a bearer token, username and password, or a key in a query parameter. Secrets are stored encrypted and never shown again.
4. Testing before you save#
Test feed downloads and parses the feed with the settings in the form, then shows how many entries it found, the detected format, the size, how many are already blocked, and a sample of twelve entries. Nothing is blocked by a test. If the count is zero, adjust the format, column or path and test again.
5. Pausing and removing#
- Pause stops the schedule and keeps every URL blocked; Resume runs the feed at the next tick.
- Remove asks whether to also unblock the URLs the feed added. Keep them if you are only changing vendors; remove them if the feed was wrong. Manually blocked URLs are never touched.
- Rotating a vendor key: Edit the feed and paste the new secret; leaving the secret blank keeps the stored one.
6. Limits and safeguards#
| Limit | Value |
|---|---|
| Feeds per organisation | 25 |
| Feed size | 25 MB per download |
| New URLs per run | 2,000 by default, 5,000 maximum; the rest follow next run |
| Addresses | http(s) only; hosts that resolve to private or reserved addresses are refused |
| Manual actions | 30 “Run now” and 20 tests or discoveries per hour |
| Plan | Feeds pause automatically while the Business plan is expired |
7. Troubleshooting#
| Message | Meaning | Fix |
|---|---|---|
| HTTP 401 or 403 — check the credentials | The vendor rejected the key | Re-enter the secret; for abuse.ch make sure the header is named Auth-Key |
| Path "…" was not found in the JSON | Wrong JSON path | Use Test feed and adjust the path; * means the root array |
| The feed returned no entries | Parsed fine, but nothing matched | Check the column or field, or the tag filter on MISP |
| The URL service rejected the first 25 entries | The blocked-list service is unavailable | Try Run now later; nothing was recorded as blocked |
| Not linked to the URL service | The organisation has no extension customer id yet | Contact SafeToOpen support to complete the link |
| capped at N per run | More new entries than the per-run cap | Normal on the first run of a large feed; later runs catch up |