SaveSaveSaveSave ← Преди да действаш English

Техническа прозрачност · септември 2026

Как всъщност работи

Всяко твърдение от „Преди да действаш“, с подробностите зад него.

Не ти трябва този документ, за да използваш продукта. Той съществува, за да може всеки, който иска да провери твърденията, да ги провери, включително неласкавите.

Двигател за проверка v0.2.0 · модел на резултата v1.0.0.

1. Покритие на мрежите

ЕкосистемаПокритие
EVM — 14 мрежиEthereum, BNB Smart Chain, Polygon, Arbitrum, Optimism, Base, Avalanche, Fantom, zkSync Era, Linea, Scroll, Blast, Mantle, Gnosis. Проверки на токени и портфейли.
SolanaСобствен модел на сигурност — право за емитиране (mint authority), право за замразяване (freeze authority), променливост на метаданните, transfer hooks — плюс данни за ликвидността (брой пулове, обща заключена стойност, статус на заключване на LP), показани като контекст, а не като вход за присъдата. Включени са проверки на портфейли.
SuiСамо сигурност на токени. Доставчикът на данни не връща данни за ликвидност или притежатели за Sui, така че обхватът отговаря на това, което реално е налично, а не на това, което би изглеждало по-добре.
TRONСигурност на токени и проверки на адреси. Потвърдено е, че отговорът на доставчика за TRON използва същата схема като EVM, а не е прието наготово.
Bitcoin, Cosmos, Cardano и другиНе се покриват. Няма адаптер, а извличането на адреси умишлено отказва да предложи проверка, която не може да направи.

Aptos беше оценена и не беше изградена. Тя фигурира в рекламните материали на доставчика на данни, но не можа да се потвърди проверим технически endpoint, затова не се твърди, че се поддържа.

Съвпадения във формата на адресите

Видът на адреса се разпознава автоматично. Четирите поддържани формата по конструкция не се припокриват, но две съвпадения си струваше да се изчислят, а не да се приемат:

Умишлено са изключени и: bech32 адреси като bc1… (извън азбуката на base58), IPFS идентификатори на съдържание, 64-символни хешове на транзакции, които съдържат вътре валидно изглеждащ 40-hex EVM адрес, и ENS имена като vitalik.eth, които наистина водят до адрес, но само чрез търсене, което тази страница никога не прави.

2. Доставчици на данни

УслугаПолучаваЦел
GoPlus SecurityАдреса и идентификатора на мрежатаДанни за риска на токени и портфейли
Нашият собствен Cloudflare WorkerАдреса и идентификатора на мрежатаПрокси за мрежи, където прякото извикване от браузъра е блокирано; санкционни проверки и проверки на контрагенти
Публични възли на блокчейнаАдреса, чрез Worker-аСанкционен оракул и заявки за контрагенти
Cloudflare Web AnalyticsАдреса на страницата и стандартни метаданни на заявкатаБроене на посещенията, без бисквитки
Google AdSenseАдреса на страницата и стандартни метаданни на заявкатаРеклами в страничните ленти, на петте страници, които ги имат

За нито един от тях не е нужен акаунт. Никой от тях не получава изпратения за проверка текст, находка, присъда или адрес, извлечен от съобщение.

Рекламният код е най-новото добавяне и това, за което си струва да сме точни. Той се зарежда на пет от единадесетте страници. От шестте без реклами — четирите ръководства, обясняващи измами чрез съобщения, плюс политиката за поверителност и условията — рекламните хостове са премахнати както от собствената им Content-Security-Policy, така и от маркъпа. Понеже браузърът комбинира meta политиката на страницата с хедъра на отговора и прилага сечението им, тези страници не могат да заредят реклама, макар хедърът за целия сайт все още да позволява хостовете за страниците с реклами. Списъкът с маршрути и причината за всеки запис са в apply-ads.js. Той получава адреса на страницата и нищо друго. Рекламните места са position: fixed в полетата на страницата, така че не са в маркъпа на резултата и изобщо не се показват под 1280px. Тест в UI пакета проверява, че в контейнера с резултати няма рекламен елемент, че двете места не съдържат интерполация на шаблони и че на рекламна глобална променлива никога не се присвоява проверен текст.

Маршрутизиране към доставчиците

Първо пряко извикване, после прокси, за всяка мрежа. Отговор с ограничение на честотата никога не се опитва отново през споделеното прокси — така би се изхарчила споделена квота за заявка, която вече е отказана, и в крайна сметка проксито би било ограничено за всички. Шестнадесет теста пазят този ред.

3. Санкционният оракул

Chainalysis Sanctions Oracle е безплатен, публично достъпен смарт договор, който отговаря дали даден адрес в момента е в санкционен списък. Без акаунт, без API ключ.

Той беше проверен, а не приет на доверие: адресът на договора беше сверен директно в Etherscan, а селекторът на функцията беше изчислен и потвърден спрямо внедрения байткод. Тук работи в 8 от 9-те мрежи, в които е внедрен.

Честното ограничение. Независим преглед откри реални разлики между влизането в сила на вписване и отразяването му в оракула — над 90 дни в един документиран случай. Съвпадението се докладва като съвпадение с оракула в момента на заявката. То не е безусловна гаранция за текущия санкционен статус и този продукт не го описва като такава.

Изложеността не е вина. Адресите са псевдонимни, през тях минават средства без съгласието на собственика им, а взаимодействието с маркиран адрес не е доказателство за нарушение от когото и да е.

4. Проверка на скорошните контрагенти

Ограничен, обявен прозорец от скорошни преводи на токени, сверени със същия оракул.

Какво не е: история на транзакциите. Такава възможност не съществува на ниво протокол за никоя мрежа без услуга за индексиране, а този продукт не поддържа такава. Не вижда и преводи на собствения актив на мрежата — само преводи на токени.

Един санкциониран контрагент премества резултата на CAUTION. Не налага FAIL. Това надделяване е запазено за случая, когато самият адрес на портфейла е пряко вписан, защото смесването на „този портфейл е вписан“ с „този портфейл е получил нещо от вписан адрес“ е грешката, която най-вероятно ще прозвучи като обвинение срещу истински човек.

Грешка на Worker-а тук връща INSUFFICIENT DATA. Тя никога не се изпуска мълчаливо и никога не се показва като чист ред.

5. Категории за откриване в съобщения

Двадесет и седем детерминистични правила в шест семейства. Не се извиква езиков модел и нищо от изпратения текст никога не се изпълнява — двигателят го чете така, както го чете проверка на правописа.

  1. Скрити и невидими символи. Символи с нулева ширина, двупосочни замени, които пренареждат показаното, и блокът Unicode Tags — кодови точки, които не се показват изобщо и могат да носят цяла скрита инструкция в безобидно изречение. Замяната с хомоглифи се хваща в същата проверка.
  2. Скрит маркъп. Инструкции, скрити в коментари, в елементи, стилизирани да са невидими, или в атрибути, които читателят никога не вижда.
  3. Кодирано съдържание. Base64 и подобни кодировки, носещи текст, който никога не е бил предназначен за човека, който го поставя.
  4. Отмяна на инструкции. Prompt injection: текст, адресиран към AI система, а не към читателя. Включва опити, насочени към самия този скенер, които се докладват като най-силната находка, а не като грешка.
  5. Искане на идентификационни данни. Искания за seed фраза, думи за възстановяване, частен ключ, парола или код за двуфакторно удостоверяване, във формулировките, с които се правят да звучат рутинно.
  6. Структура на връзките. Дестинации, скрити преди знак @, голи IP хостове, punycode домейни, които се показват като съвсем друго име, съкращаващи услуги, доверени имена на марки, поставени там, където нямат власт, домейни, изписани така, че да се прочетат като марка, домейни с марка на портфейл и прикачени думи, и дълги кодирани параметри на заявки.

Две от тях бяха дефектни до 19 септември 2026 г. и двете са записани тук, а не тихо поправени.

Фалшивата тревога. За да се реши дали името на марка стои на позицията на истинския собственик, трябва да се знае къде свършва публичният суфикс на домейна. Двигателят вземаше последните два етикета, което прочита собственика на coinbase.co.uk като co.uk — и така обикновена легитимна връзка даваше находка HIGH за имитация на марка.

Откъде идва границата на суфикса

Сега двигателят носи таблица с многоетикетни публични суфикси. Тази таблица е датирано подмножество на Public Suffix List, а не самият списък, и в изходния код е обозначена така. Оригиналният списък е около петнадесет хиляди записа и се променя на няколко седмици; вграждането на замразено копие на целия него в страница, която трябва да остане малка, би било остаряла зависимост, представена като авторитетна. Доставената таблица покрива второто ниво на кодовете на държави, което използват обикновените сайтове, и изцяло изпуска правилата със заместващи символи и изключенията на оригиналния списък, защото проста проверка за членство не може да ги изрази.

build-suffixes.js регенерира таблицата от оригиналния списък и ѝ поставя датата, на която е взета. Отказва да запише таблица, която не е успял да изтегли, и отказва да запише такава, която не минава собствените му проверки за здрав разум — мълчаливо грешна таблица на суфиксите е по-лоша от видимо стара. Хостинг суфикси като github.io са изключени умишлено: там етикетът наистина е регистриран от този, който го е поискал, така че марка на портфейл на такъв си струва да се маркира, а не да се извинява.

Неопределена граница никога не се отгатва. Тази част пречи на първоначалния бъг да се върне в нова форма. Когато хост завършва на суфикс, който таблицата не съдържа, и има формата на регистър с код на държава — двубуквен код на държава с кратък административен етикет преди него, като истинските msk.ru или nom.za — границата се докладва като неизвестна. Тогава всяка преценка за марка се въздържа, а на читателя се казва, че собствеността не може да бъде определена, вместо че сайтът имитира някого. Пропуснато откриване при необичаен суфикс е по-малък провал от това да кажеш на някого, че истинският сайт на банката му имитира банката му.

Слепото петно. Най-разпространеният трик с връзки — регистриране на домейн, изписан така, че да се прочете погрешно, metarnask вместо metamask — изобщо не се откриваше. Сега се открива, като се тества всеки начин, по който бегъл поглед може да прочете името, вместо то да се свежда до едно изписване: цифрата 1 замества l в един домейн и i в следващия, така че едно нормализиране хваща единия и пропуска другия.

Какво още се пропуска. Обикновена правописна грешка без символ двойник — metamsk.io — не се хваща. В пакета има тест, който твърди, че не се хваща, за да остане пропускът известна величина, а не изненада. Двигателят също никога не разгъва съкратена връзка: следването на адрес, избран от непознат, е самата атака, затова съкращаващата услуга се докладва като неразгъната, а не се разгъва.

Всяка находка носи идентификатор на правило, тежест, увереност, точните позиции на символите, където е съвпаднала, и обяснение на обикновен език.

Обяснението не е изпълнение

„Никога не споделяй seed фразата си с никого“ и „прати ми seed фразата си, за да потвърдя портфейла ти“ съдържат почти същите думи. Скенер, който маркира първото, е по-лош от безполезен — учи хората да не му обръщат внимание.

Двигателят разделя инструкцията от обяснението чрез оценка на указателността плюс изрична обработка на предупредителното отрицание. Първия път това беше грешно: ранна версия връщаше FAIL за легитимна статия за сигурност, посветена на опазването на seed фразата. Файлът със състезателния преглед, който го хвана, вече е постоянна част от пакета.

Известни фалшиви тревоги, запазени като тестове

6. Правилото за комбиниране

Поставеното съобщение не е едно нещо. То е текст, плюс връзки, плюс адреси, и всяко получава различна проверка с различно покритие и различни пропуски. Сливането им в една оценка унищожава най-важната информация: коя част е опасна.

PASS < INSUFFICIENT DATA < CAUTION < FAIL

Най-лошият отделен компонент определя насоките и нищо не го надгласува. Без оценка, без претеглена средна стойност, без мнозинство.

INSUFFICIENT DATA стои над PASS, защото незнанието не е същото като чистотата. Стои под CAUTION, защото конкретен наблюдаван проблем е по-важен от липсата на информация. Никога не може да скрие FAIL.

Последствия, видими в интерфейса:

Адрес 0x не носи мрежа, затова редът по подразбиране е Ethereum, казва, че мрежата не е посочена в текста, и предлага избор. Смяната на мрежата изхвърля предишния резултат, защото резултат за Ethereum не е резултат за BNB Chain.

Видове проверки

Пет производствени вида: crypto_address_scan, token_scan, wallet_scan, prompt_scan, message_scan. Зад всеки има двигател.

file_scan е резервиран и умишлено не може да бъде създаден. Една седмица стоеше в производствения списък без нищо зад себе си; нищо не се счупи, защото нищо не го извикваше, и точно затова беше премахнат. Името е твърдение.

7. Къде е открит всеки адрес

Извличането записва позициите на символите, така че всеки адрес се показва с реда, в който се е появил, и с маркиран адрес в него. „Send 0.5 ETH to 0x…“ и „the contract at 0x… was audited“ са различни ситуации, а адрес, показан без изречението си, е твърдение без произход.

Позициите се записват веднъж по време на проверката, а не се изчисляват отново при показването чрез търсене на низа — иначе адрес, който се появява два пъти, би маркирал една и съща поява и двата пъти.

Връзките към block explorer идват от фиксирана таблица, покриваща 14 EVM мрежи, Solana и TRON. Една мрежа или има известен explorer, или редът казва, че няма. Нищо не отгатва адрес. Връзката е връзка, а не проверка: не се прави заявка, докато не кликнеш.

8. Проверка на поверителността

Твърдението за поверителност при проверката на съобщения не е изведено от четене на изходния код. То е проверено срещу внедрения сайт със записване на мрежовия трафик, включено преди действието.

Метод. Беше поставено и проверено съобщение, съдържащо уникален маркерен низ, фишинг адрес, искане за seed фраза и инжекция.

Това беше повторено след добавянето на брояча на посещения, за да се потвърди, че броячът не променя резултата.

Съхранение. Този продукт не съхранява нищо. Няма база данни, няма система за акаунти, няма сървърен лог на изпратеното съдържание и няма съхранение на проверения текст в браузъра. Третите страни, посочени в раздел 2, водят свои записи според собствените си политики, които не контролираме и не описваме от тяхно име.

9. Тестовият пакет

Твърдение за прецизност струва точно толкова, колкото пакетът зад него. Тези покриват съществено различни гаранции и затова се отчитат отделно.

ПакетТвърденияКакво пази
Двигател за съобщения176Всяко семейство за откриване, границата между обяснение и изпълнение, извличането на адреси, откъсите с контекст и връзките към explorer
UI / интеграция / XSS81Кодът, реално вграден в страницата, включително пълен пакет за cross-site scripting и проверките за изолация на рекламите
Регресия на двигателя за адреси61Етикети на присъдите при зловредни, безобидни, частични, противоречиви и неправилно оформени данни от доставчика
Модел на проверката57Правилото за комбиниране, изчерпателно — включително че един неуспешен компонент никога не се разрежда
Маршрутизиране към доставчиците16Ред „първо пряко, после прокси“ за всяка мрежа; извикване с ограничение на честотата никога не се повтаря през споделено прокси
Състезателен преглед20Резултатите на двигателя, оценени спрямо внимателно човешко четене, включително безобидни случаи
Публикувани страници51Всеки разгледан пример все още стига до посочената присъда, всяка възможност, която ръководствата твърдят, е такава, която двигателят изпълнява, никое ръководство не показва работещ адрес, а рекламният статус на всяка страница отговаря на правилата за маршрути и в маркъпа, и в собствената ѝ Content-Security-Policy
Общо462

Засичане на разминаване

Скенерът е един самостоятелен файл, така че всеки двигател съществува два пъти — веднъж като собствен модул и веднъж вграден в страницата. Проверка при изграждането ги сравнява и се проваля шумно, ако се разминават.

Тя беше добавена, след като точно това се случи: поправка живееше в модула, който никой не зарежда, и една седмица се доставяше счупен път за маршрутизиране по мрежи, докато собствените тестове на модула продължаваха да минават.

Засичането на разминаването беше само половината, защото другата половина беше човек, който да се сети да постави отново. От 19 септември 2026 г. втори скрипт сам прави копирането от модулите в страницата и отказва да запише каквото и да е, ако липсва ориентир — наполовина записана страница е по-лоша от остаряла, защото остарялата поне работи.

Cross-site scripting

Тази функция взема враждебен текст от непознат и го показва обратно на страницата. Всяка стойност се екранира, включително текстът в собствения отговор на доставчика на данни за сигурност, защото подправен или компрометиран отговор отгоре също не бива да се превърне в маркъп.

Единствените вградени обработчици, които генерира рендерът, са фиксирани литерали плюс целочислен индекс, и тест проверява точно това. Единствената връзка, която резултатът може да съдържа — връзката към block explorer — се проверява в XSS пакета с шаблон, достатъчно тесен, за да бъде самото твърдение: само https, хост от фиксираната таблица и тяло на адреса без кавички, интервали или скоби.

10. Хедъри за сигурност

Задават се като хедъри на отговора, а не само като meta таг. Политика в meta таг защитава само този HTML документ; тя оставяше robots.txt, sitemap.xml и изображенията изобщо без политика.

Проверено срещу истински отговори с два независими метода, а не прието само защото има конфигурационен файл.

Какво струваше добавянето на рекламите

Струва си да се запише ясно, защото това е реално намаление, а предишната версия на тази страница твърдеше обратното.

Преди рекламите connect-src беше структурна гаранция: самият браузър би отказал да прати данни от проверката където и да е освен до два посочени хоста, каквото и да прави кодът на страницата, включително код, въведен по грешка или от нападател. Рекламните endpoint-и на Google вече са в този списък, така че гаранцията вече не е структурна — тя зависи от това кодът на страницата да не подава проверено съдържание на рекламния скрипт.

Това свойство сега се пази от тест, а не от браузъра. Това е по-слаб вид увереност и предпочитаме да го кажем, вместо да оставим по-старото и по-силно изречение, когато вече не е вярно. script-src също получи 'unsafe-inline' на страниците с документи, които преди не се нуждаеха от него.

Правила за кеширане

HTML трябва да се проверява наново при всяко зареждане. Без това завръщащ се посетител запазва вчерашния двигател след внедряване — което за инструмент за сигурност означава да пуска правила за откриване, които вече са поправени. Изображенията се кешират силно. Файловете за търсачките получават един час, достатъчно кратко, за да се вземе поправка още същия ден.

11. Отложени възможности

Назовани тук, за да останат избор, а не изненада. Нито едно от тези не съществува днес:

Следващи на ред: статична проверка на Markdown и HTML, а след това преглед дали ограничена първична проверка на JavaScript може да бъде предложена безопасно.

12. Известни пропуски

13. История на версиите

v1
Проверка на адреси и токени в EVM мрежи, един доставчик.
v2
Адаптери за Solana, Sui и TRON. Санкционният оракул е проверен и свързан. Маршрутизиране към доставчиците с резервно прокси. Добавено засичане на разминаване след едноседмична мълчалива регресия.
v3.0
Проверка на съобщения и инструкции в браузъра. Единният модел на резултата и правилото за комбиниране. Проверка на скорошни контрагенти. Правни страници, анализи без бисквитки и разделът с ръководства.
Двигател за проверка v0.2.0
Двадесет и седем правила. Добавено откриване на смяна на адресата по средата на съобщението, изброяване на възможности и формулировки за отмяна, които притежателно местоимение или прилагателно преди побеждаваха. И трите пропуска бяха открити, като проверихме собствения си публикуван пример и получихме по-слаб резултат от този, който статията твърдеше.
Модел на резултата v1.0.0
Пет производствени вида проверки, стълбата на присъдите и правилото, че печели най-лошият компонент.

14. Речник

Портфейл
Държи ключовете, които контролират криптото ти; позволява ти да изпращаш, получаваш или да взаимодействаш с него.
Частен ключ / seed фраза
Тайна, която доказва собствеността и мести средства. Никога не я споделяй — нито със SaveSaveSaveSave, нито с когото и да е. Нищо легитимно никога не се нуждае от нея.
Смарт договор
Самоизпълняващ се код в блокчейн, който определя как се държи токен или приложение.
Honeypot (капан)
Токен, създаден така, че да може да бъде купен, но не и продаден.
Право за емитиране (mint authority)
Възможността да се създава ново количество след пускането. Не е автоматично опасно — но си струва да се знае.
Prompt injection
Текст, написан да бъде прочетен от AI система, а не от теб, който ѝ нарежда да пренебрегне правилата си или да действа срещу интереса ти. Работи, независимо дали го забелязваш.
Хомоглиф
Символ от една азбука, който изглежда еднакво със символ от друга — използва се, за да изглежда фалшиво име като истинско.
Punycode
Начин за изписване на име на домейн, което в браузъра може да се покаже като съвсем друго име. Стандартният метод за фалшифициране на добре познат домейн.
Санкционен оракул
Публично достъпен смарт договор, който отговаря дали адрес в момента е санкциониран — безплатно, в блокчейна, без акаунт.
Контрагент
Адрес, с който портфейлът е имал пряка транзакция. Изложеността към рисков контрагент не е същото твърдение като това, че самият портфейл е рисков.
INSUFFICIENT DATA
Самостоятелен резултат, а не меко PASS. Проверката не можа да бъде завършена — не се знае нищо в нито една посока.
Достъп само за четене
Разрешение да виждаш, никога да променяш, местиш или харчиш.

Поправки са добре дошли чрез тракера за проблеми на проекта (на английски) или по имейл на savesavesavesave@tuta.io. Ако нещо тук е грешно, публичното казване е целта на документа. Твърдение в този документ, което се е отдалечило от кода, е бъг и си струва да се докладва като такъв.