{"id":35110,"date":"2025-11-25T19:32:13","date_gmt":"2025-11-25T16:32:13","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/"},"modified":"2025-11-25T19:32:13","modified_gmt":"2025-11-25T16:32:13","slug":"npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/","title":{"rendered":"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti"},"content":{"rendered":"<p><body><\/p>\n<p>NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.<\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinde, ba\u011f\u0131ml\u0131l\u0131klar hayati bir rol oynar. NPM (Node Package Manager) ekosistemi de bu ba\u011f\u0131ml\u0131l\u0131klar\u0131n y\u00f6netimi i\u00e7in en yayg\u0131n kullan\u0131lan platformlardan biridir. Ancak, bu kolayl\u0131k beraberinde ciddi g\u00fcvenlik risklerini de getirebilir. \u00d6zellikle &#8220;supply chain&#8221; (tedarik zinciri) sald\u0131r\u0131lar\u0131, son y\u0131llarda yaz\u0131l\u0131m d\u00fcnyas\u0131n\u0131n en b\u00fcy\u00fck kabuslar\u0131ndan biri haline gelmi\u015ftir. \u0130\u015fte tam da bu noktada Sha1-Hulud 2.0 gibi hash \u00e7ak\u0131\u015fmas\u0131 sald\u0131r\u0131lar\u0131 devreye giriyor.<\/p>\n<p>\u00d6ncelikle, konunun temelini olu\u015fturan SHA-1 ve hash \u00e7ak\u0131\u015fmas\u0131 kavramlar\u0131n\u0131 netle\u015ftirelim. SHA-1 (Secure Hash Algorithm 1), bir verinin &#8220;parmak izini&#8221; olu\u015fturan, yani o veriye \u00f6zg\u00fc, sabit uzunlukta bir kod \u00fcreten bir kriptografik hash fonksiyonudur. Bu fonksiyonun amac\u0131, verinin b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc do\u011frulamakt\u0131r. E\u011fer bir dosya \u00fczerinde k\u00fc\u00e7\u00fck bir de\u011fi\u015fiklik dahi yap\u0131l\u0131rsa, SHA-1 de\u011feri tamamen farkl\u0131la\u015f\u0131r. Bu \u00f6zellik sayesinde, indirilen bir paketin orijinal olup olmad\u0131\u011f\u0131n\u0131, \u00fczerinde oynan\u0131p oynanmad\u0131\u011f\u0131n\u0131 kontrol edebiliriz.<\/p>\n<p>Ancak, her kriptografik algoritma gibi SHA-1&#8217;in de zay\u0131fl\u0131klar\u0131 zamanla ortaya \u00e7\u0131km\u0131\u015ft\u0131r. &#8220;Hash \u00e7ak\u0131\u015fmas\u0131&#8221; (collision), iki farkl\u0131 girdinin (yani iki farkl\u0131 dosyan\u0131n veya paketin) ayn\u0131 SHA-1 \u00e7\u0131kt\u0131s\u0131n\u0131 vermesi durumudur. Kriptografik olarak g\u00fcvenli bir hash fonksiyonunda bu durumun pratikte imkans\u0131z olmas\u0131 beklenir. Fakat ara\u015ft\u0131rmac\u0131lar, SHA-1 i\u00e7in bu \u00e7ak\u0131\u015fmalar\u0131 bulman\u0131n giderek daha kolay ve daha ucuz hale geldi\u011fini kan\u0131tlad\u0131lar. Sha1-Hulud 2.0, bu \u00e7ak\u0131\u015fmalar\u0131 bulma maliyetini ve s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azaltan bir metodoloji olarak \u00f6ne \u00e7\u0131k\u0131yor.<\/p>\n<p>Peki, Sha1-Hulud 2.0&#8217;\u0131n NPM projelerinizle ne gibi bir ilgisi var? NPM, ba\u011f\u0131ml\u0131l\u0131klar\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in <code>package-lock.json<\/code> dosyas\u0131 i\u00e7inde her paketin bir &#8220;integrity&#8221; de\u011ferini saklar. Bu integrity de\u011feri, paketin i\u00e7eri\u011finin bir hash&#8217;idir. Eski NPM s\u00fcr\u00fcmlerinde veya belirli durumlarda, bu integrity de\u011feri i\u00e7in SHA-1 hash algoritmas\u0131 kullan\u0131labiliyordu. E\u011fer bir projeniz hala SHA-1 integrity de\u011ferleri i\u00e7eren ba\u011f\u0131ml\u0131l\u0131klara sahipse, Sha1-Hulud 2.0 benzeri bir sald\u0131r\u0131ya a\u00e7\u0131k hale gelebilir. Bir sald\u0131rgan, orijinal bir paketle ayn\u0131 SHA-1 hash&#8217;ine sahip k\u00f6t\u00fc ama\u00e7l\u0131 bir paketi NPM registry&#8217;sine y\u00fckleyebilir ve e\u011fer projeniz o paketi \u00e7eken bir ba\u011f\u0131ml\u0131l\u0131\u011fa sahipse, g\u00fcvenlik kontrolleri k\u00f6t\u00fc ama\u00e7l\u0131 paketi orijinal san\u0131p indirebilir. Bu durum, &#8220;tedarik zinciri sald\u0131r\u0131s\u0131&#8221; olarak bilinen t\u00fcrden bir g\u00fcvenlik ihlaline yol a\u00e7ar.<\/p>\n<h3>Ger\u00e7ek Bir Senaryo: NPM Tedarik Zinciri Sald\u0131r\u0131s\u0131<\/h3>\n<p>Hayali bir senaryo ile bu durumu daha iyi anlayal\u0131m: Bir geli\u015ftirici ekibi, geni\u015f \u00e7apl\u0131 bir e-ticaret uygulamas\u0131 geli\u015ftiriyor ve bu uygulama y\u00fczlerce NPM ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 kullan\u0131yor. Uygulama, ge\u00e7mi\u015ften gelen baz\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 nedeniyle hala <code>package-lock.json<\/code> dosyas\u0131nda SHA-1 integrity de\u011ferlerine sahip paketlere referans veriyor olabilir. Sald\u0131rgan, bu uygulamada kullan\u0131lan pop\u00fcler ancak eski bir ba\u011f\u0131ml\u0131l\u0131k olan <code>example-utils<\/code> paketini hedefler. <code>example-utils<\/code> paketi, integrity kontrol\u00fc i\u00e7in SHA-1 kullanmaktad\u0131r.<\/p>\n<p>Sald\u0131rgan, <code>example-utils<\/code> paketinin bir s\u00fcr\u00fcm\u00fcn\u00fc taklit eden, ancak i\u00e7ine gizlice k\u00f6t\u00fc ama\u00e7l\u0131 kod (\u00f6rne\u011fin, hassas kullan\u0131c\u0131 verilerini d\u0131\u015far\u0131 s\u0131zd\u0131ran bir keylogger) enjekte edilmi\u015f bir ba\u015fka paket olu\u015fturur. Sha1-Hulud 2.0 y\u00f6ntemlerini kullanarak, bu k\u00f6t\u00fc ama\u00e7l\u0131 paketin SHA-1 integrity de\u011ferinin, orijinal <code>example-utils<\/code> paketiyle ayn\u0131 olmas\u0131n\u0131 sa\u011flar. Daha sonra, NPM registry&#8217;sine bu k\u00f6t\u00fc niyetli paketi, sanki <code>example-utils<\/code> paketinin me\u015fru bir yeni s\u00fcr\u00fcm\u00fcym\u00fc\u015f gibi y\u00fckler.<\/p>\n<p>Geli\u015ftiricilerden biri, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 g\u00fcncellemek i\u00e7in <code>npm install<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131nda, <code>package-lock.json<\/code> dosyas\u0131ndaki SHA-1 integrity de\u011ferini kontrol eder. Ancak, bu de\u011fer art\u0131k hem orijinal g\u00fcvenli pakete hem de sald\u0131rgan\u0131n k\u00f6t\u00fc niyetli paketine kar\u015f\u0131l\u0131k geldi\u011fi i\u00e7in NPM, k\u00f6t\u00fc ama\u00e7l\u0131 paketi indirip projenin <code>node_modules<\/code> klas\u00f6r\u00fcne yerle\u015ftirebilir. Uygulama sunuculara da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda, gizlenen k\u00f6t\u00fc ama\u00e7l\u0131 kod \u00e7al\u0131\u015fmaya ba\u015flar ve e-ticaret sitesinin m\u00fc\u015fterilerinin kredi kart\u0131 bilgileri veya ki\u015fisel verileri sald\u0131rgan\u0131n sunucular\u0131na s\u0131zd\u0131r\u0131l\u0131r. Bu felaket senaryosu, sadece eski projelerin de\u011fil, yeni projelerin bile eski ba\u011f\u0131ml\u0131l\u0131klar\u0131 bar\u0131nd\u0131rmas\u0131 veya g\u00fcncel olmayan <code>package-lock.json<\/code> dosyalar\u0131 kullanmas\u0131 durumunda ya\u015fanabilir. Bu nedenle, projelerinizdeki SHA-1 kullanan paketleri tespit etmek ve bunlara kar\u015f\u0131 \u00f6nlem almak hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h2>Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Etmek i\u00e7in Pratik Bir Script Nas\u0131l Olu\u015fturulur?<\/h2>\n<p>Projelerimizin g\u00fcvenli\u011fini sa\u011flaman\u0131n ilk ad\u0131m\u0131, risk alt\u0131nda olabilecek ba\u011f\u0131ml\u0131l\u0131klar\u0131 tespit etmektir. Manuel olarak y\u00fczlerce, hatta binlerce paketi ve onlar\u0131n integrity de\u011ferlerini kontrol etmek neredeyse imkans\u0131zd\u0131r. Bu noktada, Sha1-Hulud 2.0 sald\u0131r\u0131lar\u0131na a\u00e7\u0131k olabilecek SHA-1 hash&#8217;i kullanan paketleri bulmak i\u00e7in otomatik bir script geli\u015ftirmek, bize b\u00fcy\u00fck kolayl\u0131k sa\u011flayacakt\u0131r. Bu b\u00f6l\u00fcmde, Node.js kullanarak b\u00f6yle bir scripti ad\u0131m ad\u0131m nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 ve projenizdeki potansiyel riskleri nas\u0131l belirleyece\u011fimizi \u00f6\u011frenece\u011fiz. Scriptimiz, t\u00fcm alt dizinlerdeki <code>package-lock.json<\/code> dosyalar\u0131n\u0131 tarayacak ve SHA-1 ile ba\u015flayan <code>integrity<\/code> de\u011ferlerine sahip paketleri raporlayacakt\u0131r.<\/p>\n<h3>Kendi Tespit Scriptimizi Ad\u0131m Ad\u0131m Olu\u015fturma<\/h3>\n<p>Scriptimiz Node.js \u00fczerinde \u00e7al\u0131\u015facak, dolay\u0131s\u0131yla sisteminizde Node.js kurulu olmal\u0131d\u0131r. Scriptin temel amac\u0131, bir dizin i\u00e7indeki ve alt dizinlerindeki t\u00fcm <code>package-lock.json<\/code> dosyalar\u0131n\u0131 bulmak, bu dosyalar\u0131 okumak ve i\u00e7erisindeki ba\u011f\u0131ml\u0131l\u0131k a\u011fac\u0131n\u0131 dola\u015farak <code>integrity<\/code> alan\u0131 SHA-1 ile ba\u015flayan paketleri tespit etmektir. \u0130\u015fte scriptin kod yap\u0131s\u0131 ve her bir b\u00f6l\u00fcm\u00fcn a\u00e7\u0131klamas\u0131:<\/p>\n<details>\n<summary>Sha1-Hulud Tespit Scripti (Node.js)<\/summary>\n<pre><code class=\"language-javascript\">\n\/\/ detect-sha1-hulud.js\nconst fs = require('fs');\nconst path = require('path');\n\n\/**\n * Belirtilen dizin i\u00e7inde ve alt dizinlerinde package-lock.json dosyalar\u0131n\u0131 bulur.\n * @param {string} dir - Aranacak ba\u015flang\u0131\u00e7 dizini.\n * @param {Array<string>} fileList - Bulunan dosya yollar\u0131n\u0131n listesi.\n * @returns {Array<string>} Bulunan package-lock.json dosyalar\u0131n\u0131n yollar\u0131n\u0131 i\u00e7eren liste.\n *\/\nfunction findPackageLockFiles(dir, fileList = []) {\n    try {\n        const files = fs.readdirSync(dir);\n        files.forEach(file => {\n            const filePath = path.join(dir, file);\n            const stat = fs.statSync(filePath);\n            if (stat.isDirectory() && file !== 'node_modules') {\n                findPackageLockFiles(filePath, fileList); \/\/ Alt dizinleri taramaya devam et\n            } else if (file === 'package-lock.json') {\n                fileList.push(filePath);\n            }\n        });\n    } catch (error) {\n        \/\/ \u0130zin hatalar\u0131 veya eri\u015filemeyen dizinler i\u00e7in hata y\u00f6netimi\n        if (error.code === 'EACCES') {\n            console.warn(<code>Uyar\u0131: ${dir} dizinine eri\u015fim izni yok, atlan\u0131yor.<\/code>);\n        } else {\n            console.error(<code>Dizin okunurken bir hata olu\u015ftu ${dir}: ${error.message}<\/code>);\n        }\n    }\n    return fileList;\n}\n\n\/**\n * package-lock.json objesi i\u00e7inde SHA-1 integrity kullanan paketleri kontrol eder.\n * @param {object} obj - package-lock.json dosyas\u0131n\u0131n parse edilmi\u015f bir b\u00f6l\u00fcm\u00fc.\n * @param {string} currentPath - Mevcut objenin package-lock.json i\u00e7indeki yolu.\n * @returns {Array<object>} Tespit edilen riskli paketlerin listesi.\n *\/\nfunction checkPackageIntegrity(obj, currentPath = '') {\n    let affectedPackages = [];\n\n    if (obj && typeof obj === 'object') {\n        for (const key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                const newPath = currentPath ? <code>${currentPath}.${key}<\/code> : key;\n\n                \/\/ 'integrity' alan\u0131n\u0131 kontrol et\n                if (key === 'integrity' && typeof obj[key] === 'string' && obj[key].startsWith('sha1-')) {\n                    \/\/ Paket ad\u0131n\u0131 ve s\u00fcr\u00fcm\u00fcn\u00fc integrity alan\u0131n\u0131n bulundu\u011fu yerin ba\u011flam\u0131ndan al\n                    \/\/ Genellikle integrity, paketin kendi objesi i\u00e7inde bulunur.\n                    const packageName = newPath.split('.').slice(-2, -1)[0] || 'root'; \/\/ 'packages.a.b' -> 'a'\n                    const packageVersion = obj.version || 'unknown';\n                    \n                    affectedPackages.push({\n                        package: packageName,\n                        version: packageVersion,\n                        integrity: obj[key],\n                        location: newPath \/\/ Integrity'nin package-lock.json i\u00e7indeki tam yolu\n                    });\n                }\n                \n                \/\/ Ba\u011f\u0131ml\u0131l\u0131k a\u011fac\u0131n\u0131 recursive olarak dola\u015f\n                if (obj[key] && typeof obj[key] === 'object') {\n                    affectedPackages = affectedPackages.concat(\n                        checkPackageIntegrity(obj[key], newPath)\n                    );\n                }\n            }\n        }\n    }\n    return affectedPackages;\n}\n\n\n\/**\n * Ba\u015flang\u0131\u00e7 dizininden itibaren t\u00fcm package-lock.json dosyalar\u0131n\u0131 tarar ve SHA-1 integrity kontrol\u00fc yapar.\n * @param {string} startDir - Taramaya ba\u015flanacak k\u00f6k dizin.\n *\/\nfunction runDetection(startDir) {\n    console.log(<code>\\n<strong># Sha1-Hulud 2.0 Tespit Taramas\u0131 Ba\u015flat\u0131l\u0131yor ###<\/code>);<\/strong>\n    console.log(<code>Tarama Ba\u015flang\u0131\u00e7 Dizini: ${startDir}<\/code>);\n\n    const lockFiles = findPackageLockFiles(startDir);\n    let allAffected = [];\n\n    if (lockFiles.length === 0) {\n        console.log(\"\\nHi\u00e7bir package-lock.json dosyas\u0131 bulunamad\u0131. L\u00fctfen do\u011fru dizini belirtti\u011finizden emin olun.\");\n        return;\n    }\n\n    lockFiles.forEach(file => {\n        console.log(<code>\\n--- ${file} dosyas\u0131 inceleniyor... ---<\/code>);\n        try {\n            const content = fs.readFileSync(file, 'utf8');\n            const lockData = JSON.parse(content);\n            \n            \/\/ package-lock.json'\u0131n farkl\u0131 versiyonlar\u0131n\u0131 ele almak i\u00e7in genel kontrol\n            let affectedInFile = [];\n\n            \/\/ Genellikle v1, v2 ve v3'\u00fcn ortak noktas\u0131 olan 'dependencies' alan\u0131n\u0131 kontrol et\n            if (lockData.dependencies) {\n                affectedInFile = affectedInFile.concat(checkPackageIntegrity(lockData.dependencies, 'dependencies'));\n            }\n\n            \/\/ v2 ve v3'te bulunan 'packages' alan\u0131n\u0131 kontrol et\n            if (lockData.packages) {\n                affectedInFile = affectedInFile.concat(checkPackageIntegrity(lockData.packages, 'packages'));\n            }\n\n            if (affectedInFile.length > 0) {\n                console.warn(<code>[UYARI] SHA-1 integrity kullanan potansiyel riskli paketler bulundu:<\/code>);\n                affectedInFile.forEach(pkg => {\n                    console.log(<code>- Paket: ${pkg.package}, S\u00fcr\u00fcm: ${pkg.version}, Integrity: ${pkg.integrity}, Konum: ${pkg.location}<\/code>);\n                });\n                allAffected = allAffected.concat(affectedInFile);\n            } else {\n                console.log(\"Bu dosyada SHA-1 integrity kullanan paket bulunamad\u0131. G\u00fcvenli g\u00f6r\u00fcn\u00fcyor.\");\n            }\n\n        } catch (error) {\n            console.error(<code>[HATA] ${file} dosyas\u0131 okunurken\/i\u015flenirken bir hata olu\u015ftu: ${error.message}<\/code>);\n        }\n    });\n\n    if (allAffected.length > 0) {\n        console.log(<code>\\n<strong># Genel Tarama Sonucu: Toplam ${allAffected.length} adet SHA-1 integrity kullanan paket tespit edildi. ###<\/code>);<\/strong>\n        console.log(\"Bu paketleri acilen incelemeniz ve m\u00fcmk\u00fcnse g\u00fcncelleyerek SHA-512 veya daha g\u00fc\u00e7l\u00fc bir hash algoritmas\u0131na ge\u00e7melerini sa\u011flaman\u0131z \u015fiddetle \u00f6nerilir.\");\n        console.log(\"Riskli paketlerin listesi yukar\u0131daki \u00e7\u0131kt\u0131da detayl\u0131ca belirtilmi\u015ftir.\");\n    } else {\n        console.log(\"\\n<strong># Genel Tarama Sonucu: T\u00fcm projelerde SHA-1 integrity kullanan paket bulunamad\u0131. Projeleriniz bu a\u00e7\u0131dan g\u00fcvenli g\u00f6r\u00fcn\u00fcyor. ###\");<\/strong>\n    }\n    console.log(<code>\\n<strong># Tarama Tamamland\u0131. ###<\/code>);<\/strong>\n}\n\n\/\/ Komut sat\u0131r\u0131 arg\u00fcman\u0131n\u0131 al veya mevcut \u00e7al\u0131\u015fma dizinini kullan\nconst startDirectory = process.argv[2] || process.cwd();\nrunDetection(startDirectory);\n<\/pre>\n<p><\/code><br \/>\n    <\/details>\n<h4>Scriptin \u00c7al\u0131\u015fma Mant\u0131\u011f\u0131<\/h4>\n<ol>\n<li><strong><code>findPackageLockFiles(dir)<\/code>:<\/strong> Bu fonksiyon, ba\u015flang\u0131\u00e7 olarak verilen dizinden ba\u015flayarak t\u00fcm alt dizinleri tarar. <code>node_modules<\/code> klas\u00f6rlerini atlayarak performans\u0131 art\u0131r\u0131r ve sadece <code>package-lock.json<\/code> dosyalar\u0131n\u0131 bulup bir liste halinde d\u00f6nd\u00fcr\u00fcr. Bu, monorepo ortamlar\u0131nda veya birden fazla projenin bulundu\u011fu geni\u015f dizinlerde etkili bir tarama sa\u011flar.<\/li>\n<li><strong><code>checkPackageIntegrity(obj, currentPath)<\/code>:<\/strong> Bu recursive fonksiyon, <code>package-lock.json<\/code> dosyas\u0131n\u0131n JSON yap\u0131s\u0131n\u0131 derinlemesine dola\u015f\u0131r. Her bir objenin <code>integrity<\/code> alan\u0131n\u0131 kontrol eder. E\u011fer bir <code>integrity<\/code> de\u011feri <code>sha1-<\/code> ile ba\u015fl\u0131yorsa, o paketi potansiyel riskli olarak i\u015faretler ve listeye ekler. Fonksiyon, NPM'in <code>package-lock.json<\/code> dosyalar\u0131n\u0131n farkl\u0131 versiyonlar\u0131ndaki (v1, v2, v3) paket ve ba\u011f\u0131ml\u0131l\u0131k yap\u0131lar\u0131n\u0131 ele alabilecek \u015fekilde tasarlanm\u0131\u015ft\u0131r. Paket ad\u0131n\u0131 ve s\u00fcr\u00fcm\u00fcn\u00fc, integrity de\u011ferinin bulundu\u011fu yerdeki JSON yap\u0131s\u0131ndan \u00e7\u0131karmaya \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong><code>runDetection(startDir)<\/code>:<\/strong> Ana fonksiyondur. <code>findPackageLockFiles<\/code> ile t\u00fcm kilit dosyalar\u0131n\u0131 toplar, her birini okur, <code>JSON.parse<\/code> ile ayr\u0131\u015ft\u0131r\u0131r ve ard\u0131ndan <code>checkPackageIntegrity<\/code> fonksiyonunu kullanarak SHA-1 riskli paketleri arar. Bulunan t\u00fcm riskli paketleri konsola yazd\u0131r\u0131r ve tarama sonunda genel bir \u00f6zet sunar. Kullan\u0131c\u0131, scripti \u00e7al\u0131\u015ft\u0131r\u0131rken tarama yap\u0131lacak dizini arg\u00fcman olarak belirtebilir; belirtilmezse mevcut dizin taran\u0131r.<\/li>\n<\/ol>\n<p>Bu scripti kullanmak i\u00e7in, kodu <code>detect-sha1-hulud.js<\/code> ad\u0131yla kaydedip terminalden <code>node detect-sha1-hulud.js [tarama_dizini]<\/code> komutuyla \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00d6rne\u011fin, mevcut dizini taramak i\u00e7in <code>node detect-sha1-hulud.js<\/code> veya belirli bir dizini taramak i\u00e7in <code>node detect-sha1-hulud.js ..\/my-projects<\/code> \u015feklinde kullanabilirsiniz.<\/p>\n<div class=\"expert-tip\">\n<p><strong>Uzman \u0130pucu:<\/strong> Scriptinizi daha da geli\u015ftirerek, buldu\u011fu riskli paketlerin listesini bir dosyaya (JSON, CSV veya HTML) kaydetmesini sa\u011flayabilirsiniz. Bu, daha b\u00fcy\u00fck projelerde raporlar\u0131 incelemeyi ve payla\u015fmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<\/p><\/div>\n<h3>\u00c7\u0131kt\u0131 G\u00f6rselle\u015ftirmesi ve Mobil Uyumlu Raporlama<\/h3>\n<p>Scriptimizin konsol \u00e7\u0131kt\u0131s\u0131 h\u0131zl\u0131 bir genel bak\u0131\u015f sunsa da, b\u00fcy\u00fck projeler ve detayl\u0131 analizler i\u00e7in daha yap\u0131land\u0131r\u0131lm\u0131\u015f ve g\u00f6rsel bir raporlama faydal\u0131 olacakt\u0131r. Bu raporu HTML format\u0131nda haz\u0131rlayarak hem okunabilirli\u011fi art\u0131rabilir hem de farkl\u0131 cihazlardan (masa\u00fcst\u00fc, tablet, mobil) kolayca eri\u015filebilir hale getirebiliriz. Scriptin buldu\u011fu verileri HTML tablosuna d\u00f6n\u00fc\u015ft\u00fcrerek, g\u00fcvenlik ekibinin veya geli\u015ftiricilerin durumu daha rahat incelemesini sa\u011flayabiliriz.<\/p>\n<p>A\u015fa\u011f\u0131daki HTML \u015fablonu ve CSS kodlar\u0131, scriptin tespit etti\u011fi riskli paketleri nas\u0131l g\u00f6rselle\u015ftirebilece\u011finize dair bir \u00f6rnektir. \u00d6zellikle mobil uyumluluk i\u00e7in kullan\u0131lan <code>@media<\/code> sorgular\u0131, k\u00fc\u00e7\u00fck ekranlarda tablonun daha d\u00fczenli g\u00f6r\u00fcnmesini sa\u011flar.<\/p>\n<details>\n<summary>Mobil Uyumlu Sha1-Hulud Tespit Raporu (HTML)<\/summary>\n<pre><code class=\"language-html\">\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Sha1-Hulud 2.0 Tespit Raporu<\/title>\n    <style>\n        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; margin: 0; padding: 20px; background-color: #f0f2f5; color: #333; }\n        h2, h3 { color: #2c3e50; border-bottom: 2px solid #ddd; padding-bottom: 10px; margin-top: 30px; }\n        .container { max-width: 1200px; margin: 20px auto; background: #fff; padding: 30px; border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }\n        table { width: 100%; border-collapse: collapse; margin-top: 25px; font-size: 0.9em; }\n        th, td { border: 1px solid #e0e0e0; padding: 12px 15px; text-align: left; }\n        th { background-color: #e8f0fe; color: #333; font-weight: 600; }\n        tr:nth-child(even) { background-color: #fdfdfd; }\n        tr:hover { background-color: #eef5ff; }\n        .warning { color: #c0392b; font-weight: bold; }\n        ul { list-style-type: disc; margin-left: 20px; padding-left: 0; }\n        li { margin-bottom: 8px; }\n        \n        \/* Mobil Uyum \u0130\u00e7in Media Query *\/\n        @media screen and (max-width: 768px) {\n            body { padding: 10px; }\n            .container { padding: 15px; }\n            table, thead, tbody, th, td, tr { display: block; }\n            thead tr { \n                position: absolute; \n                top: -9999px; \n                left: -9999px; \n            } \/* Ba\u015fl\u0131klar\u0131 gizle *\/\n            tr { border: 1px solid #ccc; margin-bottom: 15px; border-radius: 5px; overflow: hidden; }\n            td { \n                border: none;\n                border-bottom: 1px solid #eee; \n                position: relative;\n                padding-left: 50%; \/* \u0130\u00e7eri\u011fi ba\u015fl\u0131klar i\u00e7in yer a\u00e7 *\/\n                text-align: right;\n                font-size: 0.85em;\n            }\n            td::before { \n                position: absolute;\n                top: 0;\n                left: 6px;\n                width: 45%;\n                padding-right: 10px;\n                white-space: nowrap;\n                text-align: left;\n                font-weight: bold;\n                color: #555;\n            }\n            \/* Her s\u00fctun i\u00e7in ba\u015fl\u0131k etiketi *\/\n            td:nth-of-type(1)::before { content: \"Proje Yolu:\"; }\n            td:nth-of-type(2)::before { content: \"Paket Ad\u0131:\"; }\n            td:nth-of-type(3)::before { content: \"S\u00fcr\u00fcm:\"; }\n            td:nth-of-type(4)::before { content: \"Integrity:\"; }\n            td:last-child { border-bottom: 0; }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <h2>Sha1-Hulud 2.0 Tespit Raporu<\/h2>\n        <p>Bu rapor, NPM projelerinizde SHA-1 hash algoritmas\u0131n\u0131 kullanan potansiyel riskli paketleri g\u00f6stermektedir. Bu paketler, Sha1-Hulud 2.0 gibi hash \u00e7ak\u0131\u015fmas\u0131 sald\u0131r\u0131lar\u0131na kar\u015f\u0131 daha savunmas\u0131z olabilir ve g\u00fcvenlik riskleri ta\u015f\u0131yabilir.<\/p>\n\n        <h3>Tespit Edilen Riskli Paketler<\/h3>\n        <table>\n            <thead>\n                <tr>\n                    <th>Proje Yolu<\/th>\n                    <th>Paket Ad\u0131<\/th>\n                    <th>S\u00fcr\u00fcm<\/th>\n                    <th>Integrity De\u011feri<\/th>\n                <\/tr>\n            <\/thead>\n            <tbody>\n                <!-- Buraya dinamik olarak tespit edilen paket verileri eklenecek -->\n                <tr>\n                    <td><code>\/path\/to\/my-first-project\/package-lock.json<\/code><\/td>\n                    <td><span class=\"warning\">lodash<\/span><\/td>\n                    <td>4.17.15<\/td>\n                    <td><code>sha1-g9r4h5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x0y1z2a3b4c5d6e7f8g9h0i<\/code><\/td>\n                <\/tr>\n                <tr>\n                    <td><code>\/path\/to\/another-app\/package-lock.json<\/code><\/td>\n                    <td><span class=\"warning\">request<\/span><\/td>\n                    <td>2.88.2<\/td>\n                    <td><code>sha1-a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2<\/code><\/td>\n                <\/tr>\n                <tr>\n                    <td><code>\/path\/to\/legacy-system\/package-lock.json<\/code><\/td>\n                    <td><span class=\"warning\">uglify-js<\/span><\/td>\n                    <td>3.10.0<\/td>\n                    <td><code>sha1-f2e3d4c5b6a7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3<\/code><\/td>\n                <\/tr>\n                <!-- Script taraf\u0131ndan dinamik olarak buraya eklenen di\u011fer riskli paketler -->\n            <\/tbody>\n        <\/table>\n\n        <h3>\u00d6nerilen Sonraki Ad\u0131mlar<\/h3>\n        <ul>\n            <li><strong>Paketleri G\u00fcncelleyin:<\/strong> Tespit edilen paketlerin en g\u00fcncel s\u00fcr\u00fcmlerini kontrol edin. Modern s\u00fcr\u00fcmler genellikle SHA-512 veya daha g\u00fc\u00e7l\u00fc hash algoritmalar\u0131n\u0131 kullan\u0131r.<\/li>\n            <li><strong>package-lock.json'\u0131 Yeniden Olu\u015fturun:<\/strong> Gerekirse <code>rm package-lock.json && npm install<\/code> komutunu kullanarak kilit dosyan\u0131z\u0131 yeniden olu\u015fturun. Bu i\u015flem, genellikle daha g\u00fcncel integrity hash'lerinin kullan\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n            <li><strong>Alternatif Paketleri De\u011ferlendirin:<\/strong> E\u011fer bir paket hala SHA-1 kullanmaya devam ediyorsa ve g\u00fcncel bir alternatifi varsa, bu alternatife ge\u00e7meyi d\u00fc\u015f\u00fcn\u00fcn.<\/li>\n            <li><strong>S\u00fcrekli Denetim:<\/strong> Ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131 d\u00fczenli olarak denetleyin ve bu scripti periyodik olarak \u00e7al\u0131\u015ft\u0131rarak yeni risklerin \u00f6n\u00fcne ge\u00e7in.<\/li>\n        <\/ul>\n    <\/div>\n<\/body>\n<\/html>\n<\/pre>\n<p><\/code><br \/>\n    <\/details>\n<p>Bu HTML raporu, projenin yolu, riskli paketin ad\u0131, s\u00fcr\u00fcm\u00fc ve SHA-1 integrity de\u011feri gibi temel bilgileri d\u00fczenli bir tablo format\u0131nda sunar. Mobil cihazlarda g\u00f6r\u00fcnt\u00fclenirken, <code>@media screen and (max-width: 768px)<\/code> i\u00e7indeki CSS kurallar\u0131 sayesinde tablo s\u00fctunlar\u0131 alt alta y\u0131\u011f\u0131larak daha okunakl\u0131 bir deneyim sa\u011flar. Scriptinizden gelen JSON \u00e7\u0131kt\u0131s\u0131n\u0131 bu HTML \u015fablonuna dinamik olarak i\u015fleyerek tam otomatize edilmi\u015f, g\u00f6rsel bir rapor olu\u015fturabilirsiniz. Bu, g\u00fcvenlik taramalar\u0131n\u0131n sonu\u00e7lar\u0131n\u0131 payla\u015fmay\u0131 ve ilgili aksiyonlar\u0131 planlamay\u0131 olduk\u00e7a kolayla\u015ft\u0131racakt\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey Kullan\u0131m Senaryolar\u0131 ve Entegrasyon Stratejileri<\/h2>\n<p>Kendi tespit scriptimizi olu\u015fturduktan ve temel kullan\u0131m\u0131n\u0131 anlad\u0131ktan sonra, daha b\u00fcy\u00fck ve karma\u015f\u0131k geli\u015ftirme ortamlar\u0131nda bu arac\u0131 nas\u0131l daha verimli kullanabilece\u011fimizi ke\u015ffedelim. \u0130leri d\u00fczey kullan\u0131m senaryolar\u0131, scriptin otomasyon, entegrasyon ve daha derinle\u015fimli analiz yeteneklerini art\u0131rmaya odaklan\u0131r.<\/p>\n<h3>CI\/CD Ortamlar\u0131na Entegrasyon<\/h3>\n<p>En kritik entegrasyon noktalar\u0131ndan biri S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) pipeline'lar\u0131d\u0131r. Geli\u015ftirme s\u00fcrecinin erken a\u015famalar\u0131nda g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tespit etmek, bunlar\u0131 d\u00fczeltmenin maliyetini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Scriptimizi CI\/CD ortam\u0131m\u0131za entegre ederek, her kod de\u011fi\u015fikli\u011finde veya belirli zaman aral\u0131klar\u0131nda otomatik olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabiliriz. \u00d6rne\u011fin, GitHub Actions, GitLab CI\/CD veya Jenkins gibi ara\u00e7larda bir a\u015fama ekleyerek, kod taban\u0131ndaki herhangi bir <code>package-lock.json<\/code> de\u011fi\u015fikli\u011finde veya yeni bir ba\u011f\u0131ml\u0131l\u0131k eklendi\u011finde bu scripti \u00e7al\u0131\u015ft\u0131rabiliriz.<\/p>\n<p>Bir Pull Request (PR) olu\u015fturuldu\u011funda scriptin \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 ve SHA-1 integrity kullanan paketler bulunursa PR'\u0131n otomatik olarak ba\u015far\u0131s\u0131z olmas\u0131 sa\u011flanabilir. Bu, k\u00f6t\u00fc ama\u00e7l\u0131 veya riskli ba\u011f\u0131ml\u0131l\u0131klar\u0131n ana kod taban\u0131na kar\u0131\u015fmas\u0131n\u0131 engellemek i\u00e7in g\u00fc\u00e7l\u00fc bir kap\u0131 g\u00f6revi g\u00f6r\u00fcr. Scriptin \u00e7\u0131kt\u0131 format\u0131n\u0131 JSON olarak ayarlay\u0131p, bu \u00e7\u0131kt\u0131y\u0131 CI\/CD arac\u0131n\u0131n test raporlama sistemine entegre etmek, tespit edilen risklerin daha kolay g\u00f6rselle\u015ftirilmesine ve takip edilmesine yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<div class=\"expert-tip\">\n<p><strong>Uzman \u0130pucu:<\/strong> CI\/CD entegrasyonunda scriptin \u00e7\u0131kt\u0131s\u0131n\u0131 sadece konsola yazd\u0131rmak yerine, bir rapor dosyas\u0131na (\u00f6rne\u011fin <code>sha1-report.json<\/code>) kaydetmesini sa\u011flay\u0131n. Ard\u0131ndan, CI\/CD platformunuzun bu rapor dosyas\u0131n\u0131 bir artifact olarak saklamas\u0131na izin verin. Bu sayede ge\u00e7mi\u015f tarama sonu\u00e7lar\u0131n\u0131 kolayca inceleyebilir ve trendleri takip edebilirsiniz.<\/p>\n<\/p><\/div>\n<h3>Otomatik D\u00fczeltme Mekanizmalar\u0131 ve Geli\u015fmi\u015f Raporlama<\/h3>\n<p>Script, riskli paketleri tespit etmekte ba\u015far\u0131l\u0131d\u0131r, ancak otomatik d\u00fczeltme yapmak genellikle daha karma\u015f\u0131kt\u0131r ve dikkatli bir denetim gerektirir. NPM'in kendi komutlar\u0131 olan <code>npm update<\/code> veya <code>npm audit fix<\/code>, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 gidermeye yard\u0131mc\u0131 olsa da, SHA-1 \u00e7ak\u0131\u015fmas\u0131 potansiyeli do\u011frudan bir CVE (Common Vulnerabilities and Exposures) olarak ele al\u0131nmad\u0131\u011f\u0131 s\u00fcrece bu komutlar SHA-1 integrity de\u011ferlerini de\u011fi\u015ftirmeyebilir. En iyi yakla\u015f\u0131m, tespit edilen paketleri manuel olarak en g\u00fcncel s\u00fcr\u00fcmlerine y\u00fckseltmek ve ard\u0131ndan <code>rm package-lock.json && npm install<\/code> komutuyla <code>package-lock.json<\/code> dosyas\u0131n\u0131 yeniden olu\u015fturarak NPM'in varsay\u0131lan olarak SHA-512 gibi daha g\u00fc\u00e7l\u00fc hash algoritmalar\u0131n\u0131 kullanmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<p>Daha geli\u015fmi\u015f raporlama i\u00e7in, scriptin \u00e7\u0131kt\u0131s\u0131n\u0131 JSON format\u0131nda al\u0131p, ard\u0131ndan bu JSON verisini kullanarak farkl\u0131 t\u00fcrde raporlar \u00fcreten ikinci bir ara\u00e7 geli\u015ftirebilirsiniz. Bu, belirli e\u015fik de\u011ferlerine g\u00f6re uyar\u0131lar g\u00f6nderen, interaktif grafikler olu\u015fturan veya Slack\/Microsoft Teams gibi ileti\u015fim ara\u00e7lar\u0131na bildirim g\u00f6nderen bir sisteme d\u00f6n\u00fc\u015febilir. Monorepo yap\u0131lar\u0131nda, birden fazla <code>package-lock.json<\/code> dosyas\u0131 bulunaca\u011f\u0131 i\u00e7in scriptin t\u00fcm bu dosyalar\u0131 do\u011fru bir \u015fekilde tarad\u0131\u011f\u0131ndan emin olmal\u0131s\u0131n\u0131z. Scriptimiz zaten bu durumu ele alacak \u015fekilde tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>G\u00fcvenlik Politikalar\u0131 ve Fark\u0131ndal\u0131k Yaratma<\/h3>\n<p>Teknolojik \u00e7\u00f6z\u00fcmler ne kadar geli\u015fmi\u015f olursa olsun, insan fakt\u00f6r\u00fc her zaman \u00f6nemlidir. Ekip i\u00e7indeki geli\u015ftiricileri SHA-1'in zay\u0131fl\u0131klar\u0131 ve Sha1-Hulud 2.0 sald\u0131r\u0131lar\u0131n\u0131n potansiyel etkileri hakk\u0131nda bilgilendirmek, proaktif bir g\u00fcvenlik k\u00fclt\u00fcr\u00fc olu\u015fturman\u0131n temelidir. Geli\u015ftirme ekibinin, ba\u011f\u0131ml\u0131l\u0131klar\u0131 eklerken veya g\u00fcncellerken <code>integrity<\/code> de\u011ferlerinin SHA-512 veya daha g\u00fc\u00e7l\u00fc oldu\u011funu kontrol etme al\u0131\u015fkanl\u0131\u011f\u0131 kazanmas\u0131, uzun vadede projenin g\u00fcvenli\u011fini art\u0131racakt\u0131r. Ayr\u0131ca, <code>.npmrc<\/code> dosyalar\u0131nda <code>shasum-security-strategy<\/code> gibi yap\u0131land\u0131rmalar\u0131 kullanarak NPM'in belirli hash algoritmalar\u0131n\u0131 kullanmaya zorlamas\u0131 da d\u00fc\u015f\u00fcnebilir.<\/p>\n<p>Son olarak, g\u00fcvenlik taramalar\u0131n\u0131z\u0131 sadece kendi scriptinizle s\u0131n\u0131rlamay\u0131n. <code>npm audit<\/code>, Snyk, WhiteSource gibi profesyonel ba\u011f\u0131ml\u0131l\u0131k g\u00fcvenlik ara\u00e7lar\u0131n\u0131 da d\u00fczenli olarak kullanarak kapsaml\u0131 bir g\u00fcvenlik a\u011f\u0131 olu\u015fturun. Bu ara\u00e7lar, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 ve lisans sorunlar\u0131n\u0131 tespit etmekte \u00e7ok daha yeteneklidir. Kendi scriptimiz, bu daha geni\u015f g\u00fcvenlik ara\u00e7lar\u0131 setinin tamamlay\u0131c\u0131 bir par\u00e7as\u0131 olarak d\u00fc\u015f\u00fcn\u00fclebilir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, ba\u011f\u0131ml\u0131l\u0131k g\u00fcvenli\u011fi hi\u00e7bir zaman g\u00f6z ard\u0131 edilmemesi gereken kritik bir konudur. Sha1-Hulud 2.0 gibi hash \u00e7ak\u0131\u015fmas\u0131 sald\u0131r\u0131lar\u0131, \u00f6zellikle NPM gibi geni\u015f bir paket ekosisteminde, tedarik zinciri sald\u0131r\u0131lar\u0131 i\u00e7in ciddi bir tehdit olu\u015fturmaktad\u0131r. SHA-1 algoritmas\u0131n\u0131n zay\u0131fl\u0131klar\u0131 art\u0131k herkes taraf\u0131ndan biliniyor ve projelerimizde bu zay\u0131f algoritmay\u0131 kullanan ba\u011f\u0131ml\u0131l\u0131klar\u0131n varl\u0131\u011f\u0131, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131na davetiye \u00e7\u0131karmaktad\u0131r.<\/p>\n<p>Bu makalede, Sha1-Hulud 2.0 tehdidini anlaman\u0131n yan\u0131 s\u0131ra, kendi NPM projelerinizdeki SHA-1 integrity kullanan paketleri tespit etmek i\u00e7in ad\u0131m ad\u0131m bir Node.js scripti olu\u015fturmay\u0131 \u00f6\u011frendik. Ayr\u0131ca, bu scriptin CI\/CD ortamlar\u0131na nas\u0131l entegre edilebilece\u011fini, mobil uyumlu HTML raporlar\u0131 ile \u00e7\u0131kt\u0131lar\u0131n nas\u0131l g\u00f6rselle\u015ftirilebilece\u011fini ve genel proje g\u00fcvenli\u011fini art\u0131rmak i\u00e7in ek ipu\u00e7lar\u0131n\u0131 ele ald\u0131k. Unutmayal\u0131m ki g\u00fcvenlik, tek seferlik bir i\u015flem de\u011fil, s\u00fcrekli bir s\u00fcre\u00e7tir. Geli\u015ftirme ekipleri olarak, ba\u011f\u0131ml\u0131l\u0131klar\u0131m\u0131z\u0131 d\u00fczenli olarak denetlemeli, g\u00fcncel kalmal\u0131 ve en iyi g\u00fcvenlik pratiklerini uygulamal\u0131y\u0131z. Bu script, proaktif g\u00fcvenlik stratejinizin \u00f6nemli bir par\u00e7as\u0131 olabilir ve olas\u0131 riskleri \u00f6nceden belirlemenize yard\u0131mc\u0131 olarak projelerinizin daha sa\u011flam ve g\u00fcvenli olmas\u0131na katk\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n            <strong>Sha1-Hulud 2.0 sald\u0131r\u0131lar\u0131 sadece eski projeleri mi etkiler?<\/strong><\/p>\n<p>Hay\u0131r, Sha1-Hulud 2.0 sald\u0131r\u0131 potansiyeli sadece eski projelerle s\u0131n\u0131rl\u0131 de\u011fildir. Yeni projelerde bile eski ba\u011f\u0131ml\u0131l\u0131klar veya \u00f6zel durumlar nedeniyle <code>package-lock.json<\/code> dosyalar\u0131nda SHA-1 integrity de\u011ferleri bulunabilir. \u00d6zellikle NPM'in eski versiyonlar\u0131 ile olu\u015fturulmu\u015f veya belirli bir paketin sadece SHA-1 integrity deste\u011fi sundu\u011fu durumlar, yeni projelerde bile risk olu\u015fturabilir. Bu nedenle, t\u00fcm projelerin d\u00fczenli olarak taranmas\u0131 \u00f6nemlidir.<\/p>\n<\/li>\n<li>\n            <strong>Scriptin buldu\u011fu her SHA-1 integrity de\u011feri do\u011frudan bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 m\u0131d\u0131r?<\/strong><\/p>\n<p>Her SHA-1 integrity de\u011feri do\u011frudan bir g\u00fcvenlik a\u00e7\u0131\u011f\u0131 te\u015fkil etmez. Ancak, SHA-1'in kriptografik zay\u0131fl\u0131klar\u0131 nedeniyle, bu paketler potansiyel bir risk fakt\u00f6r\u00fcd\u00fcr. Bir sald\u0131rgan\u0131n Sha1-Hulud 2.0 y\u00f6ntemini kullanarak g\u00fcvenilir bir paketin SHA-1 de\u011feriyle e\u015fle\u015fen k\u00f6t\u00fc ama\u00e7l\u0131 bir s\u00fcr\u00fcm\u00fcn\u00fc olu\u015fturmas\u0131 teorik olarak m\u00fcmk\u00fcnd\u00fcr. Bu nedenle, tespit edilen her SHA-1 kullanan paketin incelenmesi ve m\u00fcmk\u00fcnse SHA-512 veya daha g\u00fc\u00e7l\u00fc bir hash kullanan s\u00fcr\u00fcmlerine g\u00fcncellenmesi \u015fiddetle tavsiye edilir.<\/p>\n<\/li>\n<li>\n            <strong><code>npm audit<\/code> komutu Sha1-Hulud 2.0 benzeri sorunlar\u0131 tespit edebilir mi?<\/strong><\/p>\n<p><code>npm audit<\/code>, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131 (CVE'ler) olan paketleri tespit etmek ve raporlamak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Sha1-Hulud 2.0 gibi hash \u00e7ak\u0131\u015fmas\u0131 zay\u0131fl\u0131klar\u0131, do\u011frudan bir \"a\u00e7\u0131k\" olarak CVE veritaban\u0131na kaydedilmedi\u011fi veya belirli bir paketin bu zafiyetten etkilendi\u011fi a\u00e7\u0131k\u00e7a belirtilmedi\u011fi s\u00fcrece <code>npm audit<\/code> taraf\u0131ndan raporlanmayabilir. Bu nedenle, geli\u015ftirdi\u011fimiz script, <code>npm audit<\/code>'in kapsam\u0131n\u0131 tamamlay\u0131c\u0131 nitelikte proaktif bir g\u00fcvenlik arac\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Projelerimde SHA-1'den SHA-512'ye ge\u00e7i\u015fi nas\u0131l sa\u011flayabilirim?<\/strong><\/p>\n<p>Genellikle, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131 en g\u00fcncel s\u00fcr\u00fcmlerine g\u00fcncellemek (<code>npm update<\/code>) ve ard\u0131ndan <code>package-lock.json<\/code> dosyas\u0131n\u0131 yeniden olu\u015fturmak (<code>rm package-lock.json && npm install<\/code>) yeterli olacakt\u0131r. Modern NPM s\u00fcr\u00fcmleri, otomatik olarak SHA-512 gibi daha g\u00fc\u00e7l\u00fc integrity de\u011ferlerini kullan\u0131r. E\u011fer hala SHA-1 kullanan bir paket tespit ederseniz, o paketin en g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fcn bile SHA-1 kulland\u0131\u011f\u0131n\u0131 kontrol etmeli ve alternatif bir paket aray\u0131\u015f\u0131na girmelisiniz.<\/p>\n<\/li>\n<li>\n            <strong>Bu scripti s\u00fcrekli \u00e7al\u0131\u015ft\u0131rmak projemin performans\u0131n\u0131 etkiler mi?<\/strong><\/p>\n<p>K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler i\u00e7in scriptin \u00e7al\u0131\u015fma s\u00fcresi genellikle ihmal edilebilir d\u00fczeydedir. \u00c7ok b\u00fcy\u00fck monorepo'lar veya y\u00fczlerce projenin bulundu\u011fu ortamlarda tarama s\u00fcresi artabilir. Ancak, bu t\u00fcr g\u00fcvenlik taramalar\u0131 genellikle CI\/CD pipeline'\u0131nda veya d\u00fczenli aral\u0131klarla (\u00f6rne\u011fin haftal\u0131k olarak) yap\u0131ld\u0131\u011f\u0131 i\u00e7in geli\u015ftirme ak\u0131\u015f\u0131n\u0131 olumsuz etkilemez. Performans endi\u015feniz varsa, taramalar\u0131 d\u00fc\u015f\u00fck yo\u011funluklu zamanlarda planlayabilirsiniz.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-35110","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti<\/title>\n<meta name=\"description\" content=\"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti\" \/>\n<meta property=\"og:description\" content=\"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-25T16:32:13+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti\",\"datePublished\":\"2025-11-25T16:32:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\"},\"wordCount\":3007,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\",\"name\":\"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-25T16:32:13+00:00\",\"description\":\"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti","description":"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/","og_locale":"tr_TR","og_type":"article","og_title":"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti","og_description":"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.","og_url":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-25T16:32:13+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti","datePublished":"2025-11-25T16:32:13+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/"},"wordCount":3007,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/","url":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/","name":"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-25T16:32:13+00:00","description":"NPM projelerinizde Sha1-Hulud 2.0 g\u00fcvenlik a\u00e7\u0131\u011f\u0131n\u0131n olu\u015fturdu\u011fu potansiyel riskleri merak m\u0131 ediyorsunuz? Bu makale, SHA-1 \u00e7ak\u0131\u015fmalar\u0131n\u0131n neden oldu\u011fu bu tehlikeli durumu anlaman\u0131za ve etkilenen paketleri tespit etmek i\u00e7in kendi basit scriptinizi nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6stermektedir. Projelerinizin g\u00fcvenli\u011fini art\u0131rmak i\u00e7in pratik \u00e7\u00f6z\u00fcmler burada.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/npm-projelerinde-sha1-hulud-2-0-etkilenen-paketleri-tespit-scripti\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"NPM Projelerinde Sha1-Hulud 2.0 Etkilenen Paketleri Tespit Scripti"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=35110"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35110\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}