எனது பக்கத் திட்டங்களை (Side Projects) பாதுகாப்பிற்காக ஆய்வு செய்தேன் — நான் கண்டறிந்தவை இதோ
சமீபத்தில் எனது அனைத்து பக்கத் திட்டங்களையும் ஆய்வு செய்தேன். எனது FastAPI backends, Telegram bots மற்றும் web apps ஆகியவற்றைச் சரிபார்த்தேன். நான் மிகவும் கவனமாக இருப்பதாக நினைத்தேன்.
நான் தவறாக நினைத்தேன்.
நான் உண்மையில் production-க்கு அனுப்பிய உண்மையான பிழைகளைக் (bugs) கண்டறிந்தேன். இவை வெறும் தத்துவார்த்தமான சிக்கல்கள் அல்ல. வேகமாகச் செயல்பட முயன்றபோது நான் செய்த தவறுகள் இவை.
நான் கண்டறிந்த முக்கிய சிக்கல்களும் அவற்றைச் சரிசெய்யும் முறைகளும் இதோ:
- நிபந்தனைக்குட்பட்ட அங்கீகாரம் (Conditional Authentication) ஒரு secret இருந்தால் மட்டுமே API keys-களைச் சரிபார்க்கும் வகையில் நான் குறியீட்டை (code) எழுதியிருந்தேன். எனது environment-இல் அந்த secret-ஐ அமைக்க மறந்துவிட்டால், அந்தச் சரிபார்ப்பு முற்றிலும் தவிர்க்கப்படும். இது எனது API-யை அனைவருக்கும் திறந்து விட்டுவிடும்.
- சரிசெய்யும் முறை: அங்கீகாரத்தை (authentication) ஒருபோதும் நிபந்தனைக்குட்பட்டதாக மாற்றாதீர்கள். ஒருவேளை secret இல்லையென்றால், அந்த app ஒரு பிழையை (error) காண்பித்து நின்றுவிட வேண்டும்.
- Git வரலாற்றில் சாவிகள் (Keys) கசிதல் எனது Git வரலாற்றில் பழைய API keys-களைக் கண்டறிந்தேன். நான் பின்னர் அவற்றை .env கோப்புகளுக்கு மாற்றிவிட்டேன், ஆனால் Git உங்கள் குறியீட்டின் ஒவ்வொரு பழைய பதிப்பையும் எப்போதும் வைத்திருக்கும்.
- சரிசெய்யும் முறை: Git-இல் ஒருமுறை commit செய்யப்பட்ட எந்தவொரு சாவியையும் (key) பாதுகாப்பற்றதாகக் கருதுங்கள். அதை உடனடியாக ரத்து (revoke) செய்யுங்கள். உங்கள் வரலாற்றைச் சுத்தப்படுத்த git-filter-repo போன்ற கருவிகளைப் பயன்படுத்துங்கள்.
- மீதமுள்ள Debug Endpoints எனது database configuration மற்றும் system settings ஆகியவற்றைத் தெரியப்படுத்தும் endpoints-களை production-இல் அப்படியே விட்டுவிட்டேன். இவை மேம்படுத்தலின் (development) போது பயனுள்ளதாக இருக்கும், ஆனால் பயன்பாட்டில் இருக்கும்போது ஆபத்தானவை.
- சரிசெய்யும் முறை: உங்கள் deployment checklist-இல் debug endpoint-களை நீக்குவதையும் சேர்த்துக் கொள்ளுங்கள்.
- விரிவான பிழைச் செய்திகள் (Verbose Error Messages) நான் பயனருக்கு நேரடி system errors-களைத் திருப்பித் தந்து கொண்டிருந்தேன். இந்த பிழைகள் உங்கள் file paths, database வகைகள் மற்றும் library பதிப்புகளை வெளிப்படுத்தும். ஒரு தாக்குதல் நடத்துபவர் (attacker) உங்கள் அமைப்பைத் தாக்க இந்தத் தரவைப் பயன்படுத்தலாம்.
- சரிசெய்யும் முறை: முழுமையான பிழையை உங்களுக்காகத் தனியாக log செய்யுங்கள். பயனருக்கு (client) பொதுவான "Internal Server Error" என்ற செய்தியை மட்டும் அனுப்புங்கள்.
- innerHTML மூலம் XSS எனது frontend-இல் பயனர் தரவைக் காண்பிக்க (render) நான் innerHTML-ஐப் பயன்படுத்தினேன். இது தாக்குதல் நடத்துபவர்கள் உங்கள் தளத்தில் ஸ்கிரிப்ட்களை (scripts) புகுத்த அனுமதிக்கிறது.
- சரிசெய்யும் முறை: தரவை எப்போதும் சுத்திகரியுங்கள் (sanitize) அல்லது innerHTML-க்கு பதிலாக textContent-ஐப் பயன்படுத்துங்கள்.
- Rate Limiting இல்லாமை வரம்புகள் இன்றி அதிகச் செலவுமிக்க AI models-களை அழைக்கும் endpoints என்னிடம் இருந்தன. ஒரு பயனர் சில நிமிடங்களிலேயே மிகப்பெரிய கட்டணத்தை ஏற்படுத்த முடியும்.
- சரிசெய்யும் முறை: அங்கீகாரம் (Authentication) அங்கீகரிக்கப்படாத பயனர்களைத் தடுக்கிறது. Rate limiting அங்கீகரிக்கப்பட்ட பயனர்கள் உங்கள் அமைப்பைப் பயன்படுத்துவதைத் (abuse) தடுக்கிறது. உங்களுக்கு இவை இரண்டும் தேவை.
- தளர்வான CORS அமைப்புகள் (Permissive CORS Settings)
எனது middleware-இல்
allow_origins=["*"]என்பதைப் பயன்படுத்தினேன். இது எந்தவொரு இணையதளமும் உங்கள் API-க்கு கோரிக்கைகளை (requests) அனுப்ப அனுமதிக்கிறது.
- சரிசெய்யும் முறை: production-இல் உங்கள் குறிப்பிட்ட டொமைன்களை (domains) மட்டும் அனுமதிக்கவும்.
- கோப்பு கசிவு நான் தற்காலிகக் கோப்புகளை உருவாக்கும் குறியீட்டை எழுதினேன், ஆனால் செயல்முறை செயலிழந்தால் அவற்றை நீக்கத் தவறிவிட்டேன். இந்தத் கோப்புகள் உங்கள் சேவையகத்தில் (server) நிரந்தரமாகத் தங்கிவிடும்.
- தீர்வு: பிழை ஏற்பட்டாலும் கோப்புகள் நீக்கப்படுவதை உறுதி செய்ய try-finally block-ஐப் பயன்படுத்தவும்.
பாதுகாப்புப் பிரச்சனைகள் அரிதாகவே வேண்டுமென்றே செய்யப்படுபவை. அவை "இதை நான் பிறகு சரிசெய்து கொள்கிறேன்" என்று சொல்வதன் விளைவாகும். அந்த "பிறகு" என்று ஒன்று எப்போதும் வருவதில்லை.
முதல் நாளிலிருந்தே உங்கள் பணிப்பாய்வில் (workflow) பாதுகாப்பை இணைத்துக் கொள்ளுங்கள். உங்கள் குறியீட்டை (code) commit செய்வதற்கு முன்பும், deploy செய்வதற்கு முன்பும் சரிபார்க்கவும்.
மூலம்: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb