Help
RSS
API
Feed
Maltego
Contact
Domain > blog.futa.gg
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-06-08
104.18.21.135
(
ClassC
)
2025-12-08
104.18.20.135
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Mon, 08 Dec 2025 09:47:59 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-aliveAge: 74628Cache-Control: public,max-age0,must-revalidatecache-status: Netlify Edge; hitcf-cache-status: DYNAMICServer: cloudflarestrict-transport-security: max-age31536000vary: Accept-Encodingx-nf-request-id: 01KBYNRPKVD2A64F6AA09X4ZBDCF-RAY: 9aab582fdafa0d10-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen> head> title>哈囉,隱私/title> meta nameviewport contentwidthdevice-width, initial-scale1.0>script srchttps://fastly.jsdelivr.net/npm/mermaid@9.4.0/dist/mermaid.min.js>/script>script> mermaid.initialize({ startOnLoad: true, });/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/prism.min.js integritysha512-hpZ5pDCF2bRCweL5WoA0/N1elet1KYL5mx3LP555Eg/0ZguaHawxNvEjF6O3rufAChs16HVNhEc6blF/rZoowQ crossoriginanonymous referrerpolicyno-referrer>/script>script srchttps://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/plugins/autoloader/prism-autoloader.min.js integritysha512-sv0slik/5O0JIPdLBCR2A3XDg/1U3WuDEheZfI/DI5n8Yqc3h5kjrnr46FGBNiUAJF7rE4LHKwQ/SoSLRKAxEA crossoriginanonymous referrerpolicyno-referrer>/script>script srchttps://cdn.jsdelivr.net/npm/lucide@0.115.0/dist/umd/lucide.min.js>/script>script> // Create callout icons window.addEventListener(load, () > { document.querySelectorAll(.callout).forEach((elem) > { const icon getComputedStyle(elem).getPropertyValue(--callout-icon); const iconName icon && icon.trim().replace(/^lucide-/, ); if (iconName) { const calloutTitle elem.querySelector(.callout-title); if (calloutTitle) { const calloutIconContainer document.createElement(div); const calloutIcon document.createElement(i); calloutIconContainer.appendChild(calloutIcon); calloutIcon.setAttribute(icon-name, iconName); calloutIconContainer.setAttribute(class, callout-icon); calloutTitle.insertBefore(calloutIconContainer, calloutTitle.firstChild); } } }); lucide.createIcons(); // Collapse callouts Array.from(document.querySelectorAll(.callout.is-collapsible)).forEach((elem) > { elem.querySelector(.callout-title).addEventListener(click, (event) > { if (elem.classList.contains(is-collapsed)) { elem.classList.remove(is-collapsed); } else { elem.classList.add(is-collapsed); } }); }); });/script>script srchttps://fastly.jsdelivr.net/npm/force-graph@1.43.0/dist/force-graph.min.js>/script>script defer srchttps://fastly.jsdelivr.net/npm/@alpinejs/persist@3.11.1/dist/cdn.min.js>/script>script srchttps://fastly.jsdelivr.net/npm/alpinejs@3.11.1/dist/cdn.min.js defer>/script>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/prism/1.25.0/themes/prism-okaidia.min.css integritysha512-mIs9kKbaw6JZFfSuo+MovjU+Ntggfoj8RwAmJbVXQ5mkAX5LlgETQEweFPI18humSPHymTb5iikEOKWF7I8ncQ crossoriginanonymous referrerpolicyno-referrer>script srchttps://fastly.jsdelivr.net/npm/whatwg-fetch@3.6.2/dist/fetch.umd.min.js crossoriginanonymous referrerpolicyno-referrer>/script>script srchttps://polyfill.io/v3/polyfill.min.js?featureses6>/script>link href/styles/digital-garden-base.css relstylesheet> link href/styles/style.css relstylesheet>link href/styles/custom-style.css relstylesheet>link relicon href/favicon.ico sizesany>link relicon href/favicon.svg typeimage/svg+xml>link relapple-touch-icon href/apple-touch-icon.png>link relmanifest href/manifest.webmanifest>style>/style> /head> body classtheme-dark markdown-preview-view markdown-rendered markdown-preview-section > div x-initisDesktop (window.innerWidth>1400) ? true: false; x-on:resize.windowisDesktop (window.innerWidth>1400) ? true : false; x-data{isDesktop: true, showFilesMobile: false}> div x-show.important!isDesktop styledisplay: none;> nav classnavbar> div classnavbar-inner> span stylefont-size: 1.5rem; margin-right: 10px; @clickshowFilesMobile!showFilesMobile>i icon-namemenu>/i>/span> a href/ styletext-decoration: none;> h1 stylemargin: 15px !important;>FutaGuard/h1> /a> /div> div classsearch-button align-icon onclicktoggleSearch()> span classsearch-icon> i icon-namesearch >/i> /span> span classsearch-text> span>Search/span> span stylefont-size: 0.6rem; padding: 2px 2px 0 6px; text-align:center; transform: translateY(4px); classsearch-keys> CTRL + K /span> /span>/div> /nav> /div> div x-showshowFilesMobile && !isDesktop @clickshowFilesMobile false styledisplay:none; classfullpage-overlay>/div> nav classfiletree-sidebar x-show.importantisDesktop || showFilesMobile styledisplay: none;> a href/ styletext-decoration: none;> h1 styletext-align:center;>FutaGuard/h1> /a> div styledisplay: flex; justify-content: center;> div classsearch-button align-icon onclicktoggleSearch()> span classsearch-icon> i icon-namesearch >/i> /span> span classsearch-text> span>Search/span> span stylefont-size: 0.6rem; padding: 2px 2px 0 6px; text-align:center; transform: translateY(4px); classsearch-keys> CTRL + K /span> /span>/div> /div> div classfolder x-data{isOpen: true}> div x-showisOpen styledisplay:none class> div classfolder inner-folder x-data{isOpen: $persist(false).as(1. 貼文)} @click.stopisOpen!isOpen> div classfoldername-wrapper align-icon> i x-showisOpen styledisplay: none; icon-namechevron-down>/i> i x-show!isOpen icon-namechevron-right>/i> span classfoldername>1. 貼文/span> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/1/2023-0604-murmur/>2023 0604 murmur /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/1/simple-x/>SimpleX /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/1/tutanota/>🐛 Tutanota 被發現有注入漏洞 /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/1/url/>🧐 URL 解釋 /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/1/nord-vpn/>本是同根生 NordVPN /a> /div> /div> /div> /div> div x-showisOpen styledisplay:none class> div classfolder inner-folder x-data{isOpen: $persist(false).as(2. 翻譯)} @click.stopisOpen!isOpen> div classfoldername-wrapper align-icon> i x-showisOpen styledisplay: none; icon-namechevron-down>/i> i x-show!isOpen icon-namechevron-right>/i> span classfoldername>2. 翻譯/span> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/2/tutanota-data-privacy-framework-privacy-shield/>Tutanota - Data Privacy Framework 只是先前 Privacy Shield 重新命名版本而且一定會失敗 /a> /div> /div> /div> /div> div x-showisOpen styledisplay:none class> div classfolder inner-folder x-data{isOpen: $persist(false).as(3. 解釋)} @click.stopisOpen!isOpen> div classfoldername-wrapper align-icon> i x-showisOpen styledisplay: none; icon-namechevron-down>/i> i x-show!isOpen icon-namechevron-right>/i> span classfoldername>3. 解釋/span> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/3/mitm/>MITM 中間人攻擊 /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/3/vpn/>VPN 是什麼 /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/3/open-vpn/>OpenVPN /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/3/web-rtc/>WebRTC 是什麼? /a> /div> /div> div x-showisOpen styledisplay:none classfilelist> div @click.stop classnotelink >i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/3/isp/>何謂 ISP? /a> /div> /div> /div> /div> div x-showisOpen styledisplay:none class> div @click.stop classnotelink active-note>i icon-namesticky-note aria-hiddentrue>/i>a data-note-icon styletext-decoration: none; classfilename href/>哈囉,隱私 /a> /div> /div> /div> /nav> /div> div classsearch-container idglobalsearch onclicktoggleSearch()> div classsearch-box> input typesearch idterm placeholderStart typing...> div idsearch-results>/div> footer classsearch-box-footer> div classnavigation-hint> span>Enter to select/span> /div> div classnavigation-hint align-icon> i icon-namearrow-up aria-hiddentrue>/i> i icon-namearrow-down aria-hiddentrue>/i> span>to navigate/span> /div> div classnavigation-hint> span>ESC to close/span> /div> /footer> /div>/div>script srchttps://cdn.jsdelivr.net/npm/flexsearch@0.7.21/dist/flexsearch.bundle.js>/script>script> document.addEventListener(DOMContentLoaded, init, false); document.addEventListener(DOMContentLoaded, setCorrectShortcut, false); window.toggleSearch function () { if (document.getElementById(globalsearch).classList.contains(active)) { document .getElementById(globalsearch) .classList .remove(active); } else { document .getElementById(globalsearch) .classList .add(active); document .getElementById(term) .focus(); } } window.toggleTagSearch function (evt) { console.log(evt.textContent); const term evt.textContent; if (term) { window .document .getElementById(term) .value term.trim(); window.toggleSearch(); window.search(); } } const loadingSvg ` svg width100 height100 viewBox0 0 45 45 xmlnshttp://www.w3.org/2000/svg stroke#fff> g fillnone fill-ruleevenodd transformtranslate(1 1) stroke-width2> circle cx22 cy22 r6 stroke-opacity0> animate attributeNamer begin1.5s dur3s values6;22 calcModelinear repeatCountindefinite /> animate attributeNamestroke-opacity begin1.5s dur3s values1;0 calcModelinear repeatCountindefinite /> animate attributeNamestroke-width begin1.5s dur3s values2;0 calcModelinear repeatCountindefinite /> /circle> circle cx22 cy22 r6 stroke-opacity0> animate attributeNamer begin3s dur3s values6;22 calcModelinear repeatCountindefinite /> animate attributeNamestroke-opacity begin3s dur3s values1;0 calcModelinear repeatCountindefinite /> animate attributeNamestroke-width begin3s dur3s values2;0 calcModelinear repeatCountindefinite /> /circle> circle cx22 cy22 r8> animate attributeNamer begin0s dur1.5s values6;1;2;3;4;5;6 calcModelinear repeatCountindefinite /> /circle> /g> /svg>`; function debounce(func, wait, immediate) { var timeout; return function () { var context this, args arguments; var later function () { timeout null; if (!immediate) func.apply(context, args); }; var callNow immediate && !timeout; clearTimeout(timeout); timeout setTimeout(later, wait); if (callNow) func.apply(context, args); }; }; function setCorrectShortcut() { if (navigator.platform.toUpperCase().indexOf(MAC) > 0) { document .querySelectorAll(.search-keys) .forEach(x > x.innerHTML ⌘ + K); } } function createIndex(posts) { const encoder (str) > str .toLowerCase() .split(/(^a-z|^\x00-\x7F)/) const contentIndex new FlexSearch.Document({ cache: true, charset: latin:extra, optimize: true, index: { field: content, tokenize: reverse, encode: encoder }, { field: title, tokenize: forward, encode: encoder }, { field: tags, tokenize: forward, encode: encoder } }) posts.forEach((p, idx) > { contentIndex.add({ id: idx, title: p.title, content: p.content, tags: p.tags //Change to removeHTML }) }); return contentIndex; } async function init() { //init offline search index const searchIndexDate 2024-01-21T14:29:51.922Z; let shouldFetch true; if(localStorage.getItem(searchIndex)) { let {date, docs} JSON.parse(localStorage.getItem(searchIndex)); if(date searchIndexDate){ shouldFetch false; let index createIndex(docs); window.docs docs window.index index; } } if(shouldFetch){ let docs await(await fetch(/searchIndex.json?v2024-01-21T14:29:51.922Z)).json(); let index createIndex(docs); localStorage.setItem(searchIndex, JSON.stringify({date: 2024-01-21T14:29:51.922Z, docs})); window.docs docs window.index index; } //open searchmodal when ctrl + k is pressed, cmd + k on mac document.addEventListener(keydown, (e) > { if ((e.ctrlKey || e.metaKey) && e.key k) { e.preventDefault(); toggleSearch(); } if (e.key Escape) { document .getElementById(globalsearch) .classList .remove(active); } //navigate search results with arrow keys if (document.getElementById(globalsearch).classList.contains(active)) { if (e.key ArrowDown) { e.preventDefault(); let active document.querySelector(.searchresult.active); if (active) { active .classList .remove(active); if (active.nextElementSibling) { active .nextElementSibling .classList .add(active); } else { document .querySelector(.searchresult) .classList .add(active); } } else { document .querySelector(.searchresult) .classList .add(active); } let currentActive document.querySelector(.searchresult.active); if (currentActive) { currentActive.scrollIntoView({behavior: smooth, block: nearest, inline: start}); } } if (e.key ArrowUp) { e.preventDefault(); let active document.querySelector(.searchresult.active); if (active) { active .classList .remove(active); if (active.previousElementSibling) { active .previousElementSibling .classList .add(active); } else { document .querySelectorAll(.searchresult) .forEach((el) > { if (!el.nextElementSibling) { el .classList .add(active); } }); } } else { document .querySelectorAll(.searchresult) .forEach((el) > { if (el.nextElementSibling) { el .classList .add(active); } }); } let currentActive document.querySelector(.searchresult.active); if (currentActive) { currentActive.scrollIntoView({behavior: smooth, block: nearest, inline: start}); } } if (e.key Enter) { e.preventDefault(); let active document.querySelector(.searchresult.active); if (active) { window.location.href active .querySelector(a) .href; } } } }); const debouncedSearch debounce(search, 200, false); field document.querySelector(#term); field.addEventListener(keydown, (e) > { if (e.key ! ArrowDown && e.key ! ArrowUp) { debouncedSearch(); } }); resultsDiv document.querySelector(#search-results); const params new URL(location.href).searchParams; if (params.get(q)) { field.setAttribute(value, params.get(q)); toggleSearch(); search(); } } window.lastSearch ; async function search() { let search field .value .trim(); if (!search) return; if (search lastSearch) return; console.log(`search for ${search}`); window.lastSearch search; resultsDiv.innerHTML loadingSvg; //let searchRequest await fetch(`/api/search?term${encodeURIComponent(search)}`); //let results await searchRequest.json(); let results offlineSearch(search); let resultsHTML ; if (!results.length) { let resultParagraph document.createElement(p); resultParagraph.innerText `No results for ${search}`; resultsDiv.innerHTML ; resultsDiv.appendChild(resultParagraph); return; } resultsHTML + div stylemax-width:100%;>; // we need to add title, url from ref results.forEach(r > { if(r.tags && r.tags.length > 0){ resultsHTML + `div classsearchresult> a classsearch-link href${r.url}>${r.title}/a> div onclickwindow.location${r.url}> div classheader-meta> div classheader-tags> ${r.tags.map(tag>a classtag hrefJavaScript:Void(0);>#+tag+/a>).join()} /div> /div> ${r.content} /div> /div>`; } else { resultsHTML + `div classsearchresult> a classsearch-link href${r.url}>${r.title}/a> div onclickwindow.location${r.url}> ${r.content} /div> /div>`; } }); resultsHTML + /div>; resultsDiv.innerHTML resultsHTML; } function truncate(str, size) { //first, remove HTML str str.replaceAll(/^>*>/g, ); if (str.length size) return str; return str.substring(0, size - 3) + ...; } function offlineSearch(searchQuery) { let data window.docs; let isTagSearch searchQuery0 # && searchQuery.length > 1; let searchResults isTagSearch ? index.search(searchQuery.substring(1), { field: tags } ) : index.search(searchQuery, { field: title, limit: 5 }, { field: content, weight: 10 } ); const getByField (field) > { const results searchResults.filter((x) > x.field field) if (results.length 0) { return } else { return ...results0.result } } const allIds new Set( ...getByField(title), ...getByField(content), ...getByField(tags) ) const dataIds ...allIds; const finalResults dataIds.map((id) > { let result dataid; result.content truncate(result.content, 400); result.tags result .tags .filter((x) > x ! gardenEntry && x ! note); //Note is automatically added by 11ty. GardenEntry is used internally to mark the home page return result; }) return finalResults; }/script> main classcontent cm-s-obsidian > header> h1>/h1> div classheader-meta> div classheader-tags> /div> /div> /header> p>這是 FutaGuard 的唯一 Blog,旨在提供隱私資訊、個人觀點、文章翻譯。/p>p>如果覺得還不錯的話還請收藏本站,或是追蹤我們的 a hrefhttps://t.me/FutaGuard target_blank classexternal-link>telegram 頻道/a>,若想合作或共筆歡迎來信 a hrefhttp://xn--futaguardtuta-c657l.io target_blank classexternal-link>futaguard🐭tuta.io/a>(請自行將中間的 emoji 替換為 @)/p> /main> style>#tooltip-wrapper { background: var(--background-primary); padding: 1em; border-radius: 4px; overflow: hidden; position: fixed; width: 80%; max-width: 400px; height: auto; max-height: 300px; font-size: 0.8em; box-shadow: 0 5px 10px rgba(0,0,0,0.1); opacity: 0; transition: opacity 100ms; unicode-bidi: plaintext; overflow-y: scroll; z-index: 10;}#tooltip-wrapper:after { content: ; position: absolute; z-index: 1; bottom: 0; left: 0; pointer-events: none; width: 100%; unicode-bidi: plaintext; height: 75px;}/style>div styleopacity: 0; display: none; idtooltip-wrapper> div idtooltip-content> /div>/div>iframe styledisplay: none; height: 0; width: 0; idlink-preview-iframe src>/iframe>script> var opacityTimeout; var contentTimeout; var transitionDurationMs 100; var iframe document.getElementById(link-preview-iframe) var tooltipWrapper document.getElementById(tooltip-wrapper) var tooltipContent document.getElementById(tooltip-content) var linkHistories {}; function hideTooltip() { opacityTimeout setTimeout(function () { tooltipWrapper.style.opacity 0; contentTimeout setTimeout(function () { tooltipContent.innerHTML ; tooltipWrapper.style.display none; }, transitionDurationMs + 1); }, transitionDurationMs) } function showTooltip(event) { var elem event.target; var elem_props elem.getClientRects()elem.getClientRects().length - 1; var top window.pageYOffset || document.documentElement.scrollTop; var url event.target.getAttribute(href); if (url.indexOf(http) -1 || url.indexOf(window.location.host) ! -1) { let contentURL url.split(#)0 if (!linkHistoriescontentURL) { iframe.src contentURL iframe.onload function () { tooltipContentHtml tooltipContentHtml + div stylefont-weight: bold; unicode-bidi: plaintext;> + iframe.contentWindow.document.querySelector(h1).innerHTML + /div> tooltipContentHtml + iframe.contentWindow.document.querySelector(.content).innerHTML tooltipContent.innerHTML tooltipContentHtml linkHistoriescontentURL tooltipContentHtml tooltipWrapper.style.display block; tooltipWrapper.scrollTop 0; setTimeout(function () { tooltipWrapper.style.opacity 1; if (url.indexOf(#) ! -1) { let id url.split(#)1; const focus tooltipWrapper.querySelector(`id${id}`); focus.classList.add(referred); console.log(focus); focus.scrollIntoView({behavior: smooth}, true) } else { tooltipWrapper.scroll(0, 0); } }, 1) } } else { tooltipContent.innerHTML linkHistoriescontentURL tooltipWrapper.style.display block; setTimeout(function () { tooltipWrapper.style.opacity 1; if (url.indexOf(#) ! -1) { let id url.split(#)1; const focus tooltipWrapper.querySelector(`id${id}`); focus.classList.add(referred); focus.scrollIntoView({behavior: smooth}, true) } else { tooltipWrapper.scroll(0, 0); } }, 1) } function getInnerWidth(elem) { var style window.getComputedStyle(elem); return elem.offsetWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) - parseFloat(style.borderLeft) - parseFloat(style.borderRight) - parseFloat(style.marginLeft) - parseFloat(style.marginRight); } tooltipWrapper.style.left elem_props.left - (tooltipWrapper.offsetWidth / 2) + (elem_props.width / 2) + px; if ((window.innerHeight - elem_props.top) (tooltipWrapper.offsetHeight)) { tooltipWrapper.style.top elem_props.top + top - tooltipWrapper.offsetHeight - 10 + px; } else if ((window.innerHeight - elem_props.top) > (tooltipWrapper.offsetHeight)) { tooltipWrapper.style.top elem_props.top + top + 35 + px; } if ((elem_props.left + (elem_props.width / 2)) (tooltipWrapper.offsetWidth / 2)) { tooltipWrapper.style.left 10px; } else if ((document.body.clientWidth - elem_props.left - (elem_props.width / 2)) (tooltipWrapper.offsetWidth / 2)) { tooltipWrapper.style.left document.body.clientWidth - tooltipWrapper.offsetWidth - 20 + px; } } } function setupListeners(linkElement) { linkElement.addEventListener(mouseleave, function (_event) { hideTooltip(); }); tooltipWrapper.addEventListener(mouseleave, function (_event) { hideTooltip(); }); linkElement.addEventListener(mouseenter, function (event) { clearTimeout(opacityTimeout); clearTimeout(contentTimeout); showTooltip(event); }); tooltipWrapper.addEventListener(mouseenter, function (event) { clearTimeout(opacityTimeout); clearTimeout(contentTimeout); }); } window.addEventListener(load, function(event) { document.querySelectorAll(.internal-link).forEach(setupListeners); document.querySelectorAll(.backlink-card a).forEach(setupListeners); });/script> script>lucide.createIcons({ attrs: { class: svg-icon } });/script> /body> /html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]