
अदृश्य द्विदिश यूनिकोड वर्णों के लिए कोड स्कैन करें (ट्रोजन सोर्स हमले की रोकथाम, CVE-2021-42574)
अदृश्य यूनिकोड द्विदिशात्मक वर्ण सोर्स कोड को निष्पादित होने से अलग तरीके से प्रदर्शित कर सकते हैं। यह CVE-2021-42574 है — ट्रोजन सोर्स हमला।
एक हमलावर ऐसे वर्णों को एम्बेड करता है जो टेक्स्ट की दिशा उलट देते हैं। कोड समीक्षा में, आप यह देखते हैं:
access_level = "admin"
लेकिन कंपाइलर यह देखता है:
access_level = "user"
ये वर्ण अदृश्य होते हैं। आपका एडिटर इन्हें नहीं दिखाएगा। आपका समीक्षक इन्हें नहीं पकड़ पाएगा। bidi-guard पकड़ लेगा।
pip install bidi-guard
# Scan current directory recursively
bidi-guard scan .
# Scan a specific file
bidi-guard scan src/auth.py
सभी द्विदिशात्मक यूनिकोड वर्णों का पता लगाता है, उनकी सटीक स्थिति, संदर्भ और गंभीरता दिखाता है।
name: BiDi Guard
on: [push, pull_request]
jobs:
bidi-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- run: pip install bidi-guard
- run: bidi-guard ci .
अपने .pre-commit-config.yaml में जोड़ें:
repos:
- repo: https://github.com/Moshe-ship/bidi-guard
rev: v0.1.0
hooks:
- id: bidi-guard
सभी 16 यूनिकोड द्विदिशात्मक नियंत्रण वर्ण:
उच्च या गंभीर के रूप में चिह्नित वर्ण प्रदर्शित टेक्स्ट को सक्रिय रूप से पुनः क्रमबद्ध कर सकते हैं — ये वही हैं जो ट्रोजन सोर्स हमलों में उपयोग किए जाते हैं।
from bidi_guard import scan_file, Finding
findings = scan_file("src/auth.py")
for f in findings:
print(f"{f.char_name} at line {f.line}:{f.col} — severity: {f.severity}")
ये वर्ण अदृश्य हैं। सचमुच अदृश्य:
grep "RLO" file.py # finds nothing
cat file.py # looks completely normal
bidi-guard आपको वह दिखाता है जो grep नहीं दिखा सकता: सटीक वर्ण, उसकी स्थिति, आसपास का संदर्भ, गंभीरता स्तर, और वह क्या करता है। यह उन्हें हटाकर ऑटो-फिक्स भी कर सकता है।
MIT — Musa the Carpenter
सऊदी AI कम्युनिटी की ओर से प्रस्तुत — पहले अरबों के लिए, और फिर पूरी दुनिया के लिए।
| कमांड | यह क्या करता है |
|---|
scan | बाइडी वर्णों के लिए फाइलों को स्कैन करें, संदर्भ सहित परिणाम दिखाएँ |
ci | CI मोड — यदि कोई खतरनाक वर्ण मिले तो गैर-शून्य एग्ज़िट कोड के साथ बाहर निकलता है |
fix | फाइलों से सभी बाइडी वर्ण हटाएँ (डिफ़ॉल्ट रूप से इंटरैक्टिव) |
explain | विज़ुअल उदाहरणों के साथ दिखाएँ कि प्रत्येक बाइडी वर्ण क्या करता है |
init | आपके प्रोजेक्ट के लिए .bidi-guard.yml कॉन्फ़िग फ़ाइल जनरेट करें |
| कोड पॉइंट | नाम | संक्षेप | गंभीरता |
|---|
| U+200E | लेफ्ट-टू-राइट मार्क | LRM | निम्न |
| U+200F | राइट-टू-लेफ्ट मार्क | RLM | निम्न |
| U+061C | अरबी अक्षर चिह्न | ALM | निम्न |
| U+200D | ज़ीरो विड्थ जॉइनर | ZWJ | निम्न |
| U+200C | ज़ीरो विड्थ नॉन-जॉइनर | ZWNJ | निम्न |
| U+2066 | लेफ्ट-टू-राइट आइसोलेट | LRI | मध्यम |
| U+2067 | राइट-टू-लेफ्ट आइसोलेट | RLI | उच्च |
| U+2068 | फर्स्ट स्ट्रॉन्ग आइसोलेट | FSI | उच्च |
| U+2069 | पॉप डायरेक्शनल आइसोलेट | PDI | मध्यम |
| U+202A | लेफ्ट-टू-राइट एम्बेडिंग | LRE | मध्यम |
| U+202B | राइट-टू-लेफ्ट एम्बेडिंग | RLE | उच्च |
| U+202C | पॉप डायरेक्शनल फॉर्मेटिंग | मध्यम | |
| U+202D | लेफ्ट-टू-राइट ओवरराइड | LRO | उच्च |
| U+202E | राइट-टू-लेफ्ट ओवरराइड | RLO | गंभीर |
| U+2028 | लाइन सेपरेटर | LS | मध्यम |
| U+2029 | पैराग्राफ सेपरेटर | PS | मध्यम |