체인 데이터는 신뢰할 수 없는 입력이다
ZooBC의 모든 토큰 이름, 심볼, 트랜잭션 메시지, 에스크로 지시문, 데이터셋 값은 수수료를 낸 사람이 고른 것입니다. 아무것도 이를 심사하지 않으며, 영구히 남는다고 해서 사실이 되는 것도 아닙니다. 개발자를 위한 규칙은 짧습니다. 체인에서 읽은 데이터는 입력이지, 결코 지시가 아닙니다.
체인의 텍스트 보여 주기
웹 페이지에서는 체인의 텍스트를 텍스트로 화면에 놓으십시오.
el.textContent = token.name; // shown as text: safe
el.innerHTML = token.name; // parsed as HTML: never
HTML로 삽입된 텍스트는 페이지의 권한으로 실행되는 마크업과 스크립트를 담을 수 있으며, 정규 표현식으로 만든 필터로는 이를 막기에 충분하지 않습니다. 링크도 같은 주의가 필요합니다. 체인 데이터에서 찾은 URL은 스킴을 확인하지 않고 따라가지 마십시오.
AI 에이전트가 움직이는 앱도 마찬가지로 토큰 이름, 메모, 데이터셋 값에서 찾은 문장에 결코 따라서는 안 됩니다. 토큰 이름에 적힌 "지시를 무시하라"는 다른 문자열과 다를 바 없는 데이터입니다. 그리고 송신자의 잔액은 그 텍스트가 안전한지에 대해 아무것도 말해 주지 않습니다.
프로토콜이 검사하는 것
체인이 형식을 강제하는 필드는 몇 개뿐입니다.
| 필드 | 규칙 |
|---|---|
tokenicon: 데이터셋 값 | PNG 또는 WebP 이미지, 가로세로 각각 1~512픽셀, 16~4,096바이트 |
| 게이트웨이 같은 레지스트리 도메인 | 1~256자: 문자, 숫자, 점, 하이픈 |
| 게이트웨이 같은 레지스트리 URL | https://로 시작하며, 공백, 제어 문자, 따옴표, 꺾쇠괄호, 백틱이 없음 |
inv: 데이터셋 값 | 어디에도 음수가 없는 JSON 객체 |
그 밖의 모든 것은 설계상 임의의 바이트입니다. 검사되는 필드라도 형식일 뿐입니다. 형식이 올바른 https:// 주소라도 어디로든 이어질 수 있습니다.
토큰 아이콘
노드는 각 토큰의 아이콘을 GET /api/v1/tokens/:id/icon에서 이를 무해하게 유지하는 헤더와 함께 제공합니다. X-Content-Type-Options: nosniff, Content-Disposition: inline, Content-Security-Policy: default-src 'none'; sandbox, 그리고 5분 캐시입니다. 페이지에는 그 경로를 가리키는 이미지 태그 하나면 충분합니다.
데이터셋 행: 설정자를 확인하십시오
노드의 계정별 데이터셋 목록은 그 계정이 설정자나 수신자인 행을 돌려주며, 어떤 계정이든 다른 어떤 계정 아래에든 행을 기록할 수 있습니다(데이터셋). 계정이 자기 자신에 대해 말하는 것을 읽으려면 role이 설정자이거나 둘 다인 행만 남기십시오. 계정이 수신자이기만 한 행은 다른 누군가가 기록한 것입니다. "verified = yes" 같은 주장을 확인하려면 설정자가 신뢰하는 계정인 행만 받아들이십시오.
값은 두 가지 형태로 옵니다. 이스케이프된 value와 손실 없는 value_b64입니다. 어느 쪽이든 내용은 낯선 사람의 텍스트이며, 나머지와 마찬가지로 textContent로 보여 주어야 합니다.
점검 목록
- 체인에서 읽은 모든 문자열에는
innerHTML이 아니라textContent를 씁니다. - URL을 따라가기 전에 스킴을 확인하고, 체인의 텍스트를 결코 지시로 따르지 않습니다.
- 데이터셋 행은 예상한 설정자의 것만 신뢰합니다.
- 토큰 아이콘은 아이콘 경로를 통해 보여 줍니다.