Zabránění problémům s používáním GitHub Copilotu
Zabránění problémům se zabezpečením před jejich výskytem je efektivnější než jejich oprava po nasazení. V této lekci se dozvíte, jak během vývoje aktivně používat GitHub Copilot k zápisu zabezpečeného kódu od začátku.
Proaktivní bezpečnostní přístup
Nákladově nejefektivnější chybou je ta, kterou nikdy nezadáte. I když je cenné naučit se rychle řešit problémy se zabezpečením, je mnohem lepší jim vůbec předcházet. Tento přechod od reaktivního k proaktivnímu zabezpečení vyžaduje integraci postupů a nástrojů zabezpečeného kódování, jako je GitHub Copilot, do každodenního pracovního postupu vývoje.
Zvažte relativní náklady:
- Během psaní kódu: Minimální náklady – zapište ho správně poprvé.
- Během kontroly kódu: Nízké náklady – zachycení a oprava před sloučením.
- Během testování kvality: Střední náklady – vyžaduje opakované testování a potenciálně ovlivňuje plán.
- V produkčním prostředí: Vysoké náklady – nouzové opravy, potenciální bezpečnostní incidenty, poškození pověsti.
Vytvořením zabezpečení od začátku výrazně snížíte náklady i rizika.
GitHub Copilot jako partner pro kódování zaměřený na zabezpečení
GitHub Copilot vám může pomoct při psaní zabezpečeného kódu od začátku vývoje, nejen při řešení problémů.
Psaní zabezpečeného kódu od nuly
Při spouštění nových funkcí nebo funkcí komunikujte záměr zabezpečení prostřednictvím komentářů a výzev. GitHub Copilot tento kontext používá k návrhu zabezpečených implementací.
Představte si následující komentář ke kódu:
// Query database for user by name using parameterized query to prevent SQL injection
GitHub Copilot vyhodnotí záměr popsaný v komentáři, zkontroluje kontext poskytnutý kódem, který je otevřený v editoru, a pak vygeneruje navrhovaný kód pomocí zabezpečených vzorů kódování. V tomto případě místo návrhu zřetězení řetězců pro dotazy SQL pravděpodobně GitHub Copilot navrhne něco podobného jako následující kód:
string query = "SELECT * FROM Users WHERE Name = @name";
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@name", userName);
using (SqlDataReader reader = command.ExecuteReader())
{
// Process results
}
}
Když napíšete jasně určené komentáře, které gitHub Copilot posunou směrem k zabezpečeným vzorům, použijete trénování umělé inteligence na miliony příkladů kódu, abyste ve výchozím nastavení získali implementace osvědčených postupů.
K prozkoumání postupů zabezpečeného kódování můžete použít také zobrazení chatu GitHub Copilotu. Pokud například chcete pomoct s implementací hash hesel, můžete do zobrazení chatu zadat následující výzvu:
How do I hash a password using a secure, industry-standard algorithm with automatic salting?
GitHub Copilot vyhodnocuje vaši výzvu, použije kód otevřený v editoru pro kontext a pak navrhne kód, který používá dobře hodnocenou knihovnu a zabezpečené postupy. Může například navrhnout následující kód:
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(password);
Použití GitHub Copilotu vám může pomoct s implementací zabezpečených vzorů od počátku, což snižuje pravděpodobnost zavedení ohrožení zabezpečení.
Průběžné ověřování během vývoje
GitHub Copilot může při psaní kódu fungovat jako poradce pro zabezpečení v reálném čase. Při psaní kódu můžete položit otázky GitHub Copilotu, abyste ověřili svůj přístup.
Tady je několik ukázkových výzev, které se dají použít k ověření zabezpečení:
- "Existuje potenciální chyba zabezpečení ve vybraném přístupu k ověřování?"
- "Jaké vstupní ověření mám přidat do vybrané funkce pro nahrání souboru?"
- "Dodržuje vybraný šifrovací kód aktuální osvědčené postupy?"
- "Zkontrolujte soubor, který je otevřený v editoru kódu. Souvisí s tím, jak zpracovávám uživatelské relace, nějaké obavy týkající se zabezpečení?
Toto ověřování v reálném čase působí jako neustálá dostupnost kontrolora kódu zaměřeného na zabezpečení.
Integrace nástrojů a postupů zabezpečení
GitHub Copilot doplňuje další nástroje a postupy zabezpečení ve vývojovém pracovním postupu.
Statická analýza a lintery
Automatizované nástroje pro analýzu kódu spolupracují s GitHub Copilotem a poskytují komplexní pokrytí zabezpečení v průběhu procesu vývoje.
Kombinování Copilotu s automatizovanými nástroji pro analýzu kódu:
- Analyzátory .NET: Prosazují standardy kódování a zachytí běžné problémy.
- GitHub CodeQL: Zkontrolujte ohrožení zabezpečení v pull requestech.
- Lintery zabezpečení: Nástroje specifické pro jazyk, které označují nebezpečné vzory.
GitHub Copilot pomáhá psát kód, který je méně pravděpodobné, že aktivuje upozornění těchto nástrojů. Když řeknete GitHub Copilotu, aby použil parametrizované dotazy, měl by navrhovaný kód projít kontrolami SQL injekce bez nutnosti změn.
Zvažte následující integraci pracovního postupu:
- Napište kód s asistencí Copilotu pomocí bezpečnostně orientovaných výzev.
- Během vývoje spusťte místní lintery a analyzátory.
- Před potvrzením vyřešte všechny problémy.
- Automatizované potrubí CI/CD spouští komplexní kontroly zabezpečení.
- Kontrola kódu zahrnuje kontroly lidského i automatizovaného zabezpečení.
Tento vícevrstvý přístup zachytává problémy v několika bodech. Použití GitHub Copilotu pomáhá zabránit problémům v nejstarší fázi.
Standardy kódování a týmové postupy
Konzistentní standardy zabezpečení v rámci vývojového týmu zajišťují, aby všichni implementovali bezpečnostní opatření jednotně a efektivně.
Vytvoření a vynucení zabezpečených standardů kódování:
- Definujte týmové pokyny pro běžné postupy zabezpečení.
- Používejte pouze schválené kryptografické knihovny (určete, které).
- Nikdy nekonkatenujte uživatelský vstup do dotazů SQL.
- Vždy ověřte cesty k souborům ze vstupu uživatele.
- Události protokolu, ne citlivá data.
- Použijte schválené vzory ověřování/autorizace.
Když členové týmu pracují na kódu, mohou tyto standardy odkazovat ve výzvách GitHub Copilot. GitHub Copilot pomáhá zajistit konzistenci generováním kódu, který odpovídá zavedeným vzorům.
Preventivní bezpečnostní opatření
Tyto postupy konzistentně použijte ke snížení ohrožení zabezpečení.
Ověřování vstupu a sanitizace
Ověření veškerého uživatelského vstupu před zpracováním je jedním z nejzákladnějších postupů zabezpečení pro prevenci útoků prostřednictvím injektáže a dalších ohrožení zabezpečení.
Každý vstupní bod pro uživatelská data by měl zahrnovat ověření. Použijte limity délky, ověřování formátu, přístupové metody pomocí seznamu povolených adres, kontrolu typů a ověřování rozsahu, abyste zabránili přetečení paměti, útokům DoS a škodlivým vstupům.
Můžete vyzvat GitHub Copilot k vygenerování ověřovacího kódu. Pokud chcete například ověřit e-mailovou adresu:
// Validate email address format and length before processing
GitHub Copilot může navrhnout kód, který kontroluje hodnoty null/prázdné, ověřuje limity délky a pomocí regulárních výrazů ověřuje formátovou správnost.
Princip nejmenšího oprávnění
Omezení oprávnění pouze na to, co je nezbytné, snižuje potenciální škody v případě porušení zabezpečení.
V celé aplikaci použijte minimální potřebná oprávnění pro připojení k databázi, přístup k systému souborů, přístup k rozhraní API a uživatelská oprávnění. GitHub Copilot sice nemůže konfigurovat infrastrukturu, ale může vám pomoct implementovat správné kontroly oprávnění v kódu.
Využití zabezpečené knihovny
Použití dobře zavedených knihoven zabezpečení snižuje riziko chyb implementace v důležitých funkcích zabezpečení.
Používejte dobře otestované, udržované knihovny a ne implementujte funkce kritické pro zabezpečení sami. Zvolte vytvořené knihovny, jako je Entity Framework pro databázové dotazy, ASP.NET Identita pro ověřování, BCrypt.Net pro hashování hesel a sada SDK služby Azure Key Vault pro správu tajných kódů.
Napište výzvy, které instruují GitHub Copilotu, aby používal schválené knihovny. Příklad: Implementace hash hesel pomocí knihovny BCrypt.Net.
Testování požadavků na zabezpečení
Testy zabezpečení ověřují, že vaše ochranná opatření fungují tak, jak mají, a zachytí ohrožení zabezpečení před nasazením.
Integrujte testování zabezpečení do procesu vývoje. Otestujte případy ověření vstupu, scénáře ověřování a autorizace, operace šifrování, zpracování chyb s citlivými daty a hranice oprávnění.
K vygenerování testů zabezpečení můžete vyzvat GitHub Copilot. Příklad: Zápis testů xUnit pro funkci ValidatePath, která ověřuje, že brání útokům procházení adresářů.
Použití GitHub Copilotu v kontrolách kódu
Revize kódu jsou kritické kontrolní body zabezpečení. GitHub Copilot for Pull Requests může automaticky označit podezřelé vzory, identifikovat potenciální ohrožení zabezpečení a navrhovat vylepšení.
GitHub Copilot Chat můžete použít také při ručních kontrolách tak, že položíte otázky, jako je "Existují obavy ohledně zabezpečení těchto změn?" nebo "Jaké potenciální chyby zabezpečení v tomto kódu existují?"
Vyvážení zabezpečení a produktivity
Zabudování zabezpečení hned od začátku je rychlejší než dodatečné přidání. Psaní zabezpečeného kódu zpočátku přidává 5–10% čas vývoje, zatímco řešení problémů se zabezpečením později přidá 30–50%a reakce na incidenty zabezpečení může přidat 200–500% nebo více. GitHub Copilot urychluje zabezpečený vývoj tím, že navrhuje vhodné vzory rychle.
Vývoj myšlení zaměřeného na zabezpečení
Je nezbytné, aby si všichni vývojáři osvojili myšlení zaměřené na bezpečnost. Přístup založený na zabezpečení upřednostňuje aspekty zabezpečení v průběhu procesu vývoje od návrhu po nasazení.
Problémy se zabezpečením můžete zabránit konzistentním použitím těchto principů:
- Předpokládejme, že všechny vstupy jsou škodlivé a ověřují vše.
- Bezpečně selhat, aniž by došlo k odhalení dat nebo vytvoření zranitelností.
- Používejte hloubkovou ochranu s několika vrstvami zabezpečení.
- Udělte minimální potřebná oprávnění.
- Protokolování událostí zabezpečení bez zahrnutí citlivých dat
Pomocí GitHub Copilotu můžete tyto principy konzistentně implementovat tak, že je zahrnete do výzev a komentářů.
Shrnutí
Zabránění problémům se zabezpečením během vývoje je efektivnější a nákladově efektivnější než jejich pozdější oprava. GitHub Copilot slouží jako proaktivní partner zabezpečení, který vám pomáhá psát zabezpečený kód od začátku prostřednictvím výzev zaměřených na zabezpečení, ověřování v reálném čase a implementace osvědčených postupů. Integrací GitHub Copilotu s dalšími nástroji zabezpečení, vytvořením týmových standardů a údržbou myšlení na prvním místě zabezpečení můžete výrazně snížit ohrožení zabezpečení v základu kódu.