Puan ders bitince hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Güvenli dosya ve yol işleme
AltayKargo iade servisi, müşterinin hasar fotoğrafı yüklemesini kabul eder. Kullanıcı dosya adını kendisi seçer ve sunucuya gönderir. Sunucu bu adı doğrudan disk yoluna eklerse tehlikeli olur. Adın içine üst dizine çıkan bir yol parçası konursa, dosya yükleme klasörünün dışına, sunucunun başka bir dizinine yazılabilir ya da oradan okunabilir. Bu saldırıya dizin gezinmesi denir. Kök neden, kullanıcı girdisinin dosya sistemi yoluna doğrudan katılmasıdır. Çözüm iki katmanlıdır: kullanıcının seçtiği orijinal adı hiç kullanma, sunucu kendi ürettiği rastgele bir ad ver; ayrıca hesaplanan nihai yolun izin verilen kök klasörün gerçekten içinde kaldığını denetle. Aynı kural, sunucunun kabul ettiği başka her kullanıcı kontrollü yol parçası için de geçerlidir; klasör adı, dosya uzantısı ya da alt dizin seçimi de aynı denetimden geçmelidir.
app.post("/api/iadeler/:id/fotograf", (req, res) => {
const hedefYol = path.join(YUKLEME_KLASORU, req.file.originalname);
fs.writeFileSync(hedefYol, req.file.buffer);
res.json({ durum: "kaydedildi" });
});app.post("/api/iadeler/:id/fotograf", (req, res) => {
const guvenliAd = crypto.randomUUID() + ".jpg";
const hedefYol = path.join(YUKLEME_KLASORU, guvenliAd);
if (!hedefYol.startsWith(YUKLEME_KLASORU + path.sep)) return res.status(400).end();
fs.writeFileSync(hedefYol, req.file.buffer);
res.json({ durum: "kaydedildi", ad: guvenliAd });
});Rastgele üretilen ad, kullanıcı girdisini yoldan tamamen çıkarır. startsWith kontrolü ikinci bir güvence katmanıdır; ad üretimi bir gün değişirse bile yol yine kök klasörün dışına çıkamaz. Uzantı da sabit olarak zorlanır, kullanıcı başka bir uzantı seçemez. Orijinal dosya adını tamamen görmezden gelmek, saldırganın adın içine ne yazdığını da önemsiz kılar.