{"id":31781,"date":"2025-10-13T23:31:19","date_gmt":"2025-10-13T20:31:19","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/"},"modified":"2025-10-13T23:31:19","modified_gmt":"2025-10-13T20:31:19","slug":"laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/","title":{"rendered":"Laravel&#8217;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA"},"content":{"rendered":"<p><body><\/p>\n<p>Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel&#8217;in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn dijital d\u00fcnyas\u0131nda, kullan\u0131c\u0131lar\u0131n web siteleriyle etkile\u015fim kurmas\u0131, markalar ve topluluklar i\u00e7in paha bi\u00e7ilmez bir de\u011fer ta\u015f\u0131yor. Yorum b\u00f6l\u00fcmleri, kullan\u0131c\u0131lar\u0131n geri bildirimlerini payla\u015fabildi\u011fi, soru sorabildi\u011fi veya di\u011fer kullan\u0131c\u0131larla etkile\u015fimde bulunabildi\u011fi dinamik alanlard\u0131r. Ancak, bu dinamizm ayn\u0131 zamanda beraberinde ciddi g\u00fcvenlik risklerini de getirir. Spam botlar\u0131, oltalama sald\u0131r\u0131lar\u0131 (phishing), siteler aras\u0131 komut \u00e7al\u0131\u015ft\u0131rma (XSS) ve SQL enjeksiyonu gibi tehditler, yorum sistemlerinin en zay\u0131f noktalar\u0131ndan s\u0131zarak t\u00fcm web sitesinin g\u00fcvenli\u011fini tehlikeye atabilir. Bu nedenle, bir yorum sisteminin sadece i\u015flevsel olmas\u0131 de\u011fil, ayn\u0131 zamanda sa\u011flam g\u00fcvenlik mekanizmalar\u0131na sahip olmas\u0131 da zorunludur. Laravel gibi modern bir framework, bu g\u00fcvenlik zorluklar\u0131n\u0131 a\u015fmak i\u00e7in g\u00fc\u00e7l\u00fc ve entegre \u00e7\u00f6z\u00fcmler sunar. Geli\u015ftiriciler, kimlik do\u011frulama, do\u011frulama kurallar\u0131 ve oturum y\u00f6netimi gibi \u00f6zellikleri kullanarak, k\u00f6t\u00fc niyetli akt\u00f6rlerin sistemlerine s\u0131zmas\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde engelleyebilirler. Unutmamak gerekir ki, g\u00fcvenli bir yorum sistemi, sadece web sitesinin itibar\u0131n\u0131 korumakla kalmaz, ayn\u0131 zamanda kullan\u0131c\u0131lar\u0131n platformunuza olan g\u00fcvenini de peki\u015ftirir. K\u0131sacas\u0131, yorum sisteminizin g\u00fcvenli\u011fini sa\u011flamak, sadece teknik bir gereklilik de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131 deneyiminin ve platformunuzun uzun vadeli ba\u015far\u0131s\u0131n\u0131n temel bir bile\u015fenidir.<\/p>\n<p>\u00d6zellikle e-ticaret siteleri, bloglar veya haber portallar\u0131 gibi kullan\u0131c\u0131 etkile\u015fiminin yo\u011fun oldu\u011fu platformlarda, yorumlar\u0131n g\u00fcvenli\u011fi kritik bir \u00f6neme sahiptir. Bir e-ticaret sitesindeki \u00fcr\u00fcn yorumlar\u0131n\u0131n spam veya sahte olmas\u0131, potansiyel m\u00fc\u015fterilerin sat\u0131n alma kararlar\u0131n\u0131 olumsuz etkileyebilir. Benzer \u015fekilde, bir blogda k\u00f6t\u00fc niyetli veya uygunsuz yorumlar, markan\u0131n itibar\u0131n\u0131 zedeleyebilir. Bu gibi senaryolarda, yorum yapan kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frulamak ve otomatik botlar\u0131n sistemle etkile\u015fimini engellemek, sistemin genel sa\u011fl\u0131\u011f\u0131 ve g\u00fcvenilirli\u011fi i\u00e7in vazge\u00e7ilmezdir. \u0130\u015fte tam da bu noktada, Laravel&#8217;in kimlik do\u011frulama sistemi (ID Authentication) ve aritmetik CAPTCHA mekanizmas\u0131 devreye giriyor. Kimlik do\u011frulama, her yorumun ger\u00e7ek bir kullan\u0131c\u0131 taraf\u0131ndan yap\u0131ld\u0131\u011f\u0131n\u0131 garanti ederken, aritmetik CAPTCHA botlar\u0131n spam g\u00f6ndermesini matematiksel bir bulmaca ile \u00f6nler. Bu iki temel bile\u015fen, bir araya geldi\u011finde, web sitenizi daha g\u00fcvenli, daha d\u00fczenli ve dolay\u0131s\u0131yla daha de\u011ferli bir platform haline getirmenize olanak tan\u0131r. Ayr\u0131ca, Laravel&#8217;in sa\u011flad\u0131\u011f\u0131 kolay entegrasyon ve esneklik sayesinde, bu g\u00fcvenlik \u00f6zelliklerini mevcut veya yeni projenize h\u0131zl\u0131ca dahil edebilirsiniz. Bu s\u00fcre\u00e7te dikkat etmeniz gereken baz\u0131 temel Laravel kavramlar\u0131; MVC mimarisi, Eloquent ORM ile veritaban\u0131 etkile\u015fimi ve Blade \u015fablon motorudur. Bu kavramlara hakim olmak, g\u00fcvenli yorum sisteminizi ba\u015far\u0131yla in\u015fa etmenizin anahtar\u0131 olacakt\u0131r.<\/p>\n<h2>Laravel&#8217;de Kimlik Do\u011frulama (ID Authentication) Nas\u0131l Uygulan\u0131r ve Yorumlarla Nas\u0131l \u0130li\u015fkilendirilir?<\/h2>\n<p>Bir yorum sisteminde en temel g\u00fcvenlik katmanlar\u0131ndan biri, yorum yapan kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frulamakt\u0131r. Kimlik do\u011frulama olmadan, herhangi biri yorum yapabilir ve bu da anonim spam&#8217;in veya k\u00f6t\u00fc niyetli i\u00e7eriklerin \u00f6n\u00fcn\u00fc a\u00e7ar. Laravel, bu s\u00fcreci olduk\u00e7a basitle\u015ftiren g\u00fc\u00e7l\u00fc ve kapsaml\u0131 bir kimlik do\u011frulama sistemi sunar. \u0130lk olarak, Laravel uygulaman\u0131zda bir kullan\u0131c\u0131 kay\u0131t ve giri\u015f sistemi kurman\u0131z gerekir. Laravel 9 ve \u00fczeri versiyonlarda, bu genellikle Laravel Breeze veya Laravel Jetstream paketleri arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Bu paketler, kimlik do\u011frulama i\u00e7in gerekli t\u00fcm g\u00f6r\u00fcn\u00fcmleri, rotalar\u0131 ve denetleyicileri otomatik olarak olu\u015fturarak size b\u00fcy\u00fck bir zaman kazand\u0131r\u0131r. \u00d6rne\u011fin, Breeze&#8217;i kurmak i\u00e7in a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir:<\/p>\n<pre><code>\ncomposer require laravel\/breeze --dev\nphp artisan breeze:install\nphp artisan migrate\nnpm install && npm run dev\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu ad\u0131mlar, <code>users<\/code> tablosunu ve kullan\u0131c\u0131 kayd\u0131, giri\u015fi, \u015fifre s\u0131f\u0131rlama gibi temel kimlik do\u011frulama mekanizmalar\u0131n\u0131 kurar. Bir kullan\u0131c\u0131 kaydolup giri\u015f yapt\u0131\u011f\u0131nda, Laravel'in <code>Auth<\/code> facade'\u0131 arac\u0131l\u0131\u011f\u0131yla onun kimli\u011fine eri\u015febiliriz. Yorum sistemi i\u00e7in, \u00f6ncelikle bir <code>Comment<\/code> modeli ve veritaban\u0131 tablosu olu\u015fturmam\u0131z gerekir. Bu tablo, yorumun i\u00e7eri\u011fi (<code>content<\/code>), yorumu yapan kullan\u0131c\u0131n\u0131n ID'si (<code>user_id<\/code>) ve hangi g\u00f6nderiye ait oldu\u011fu (<code>post_id<\/code> veya benzeri) gibi bilgileri i\u00e7ermelidir. <code>user_id<\/code> alan\u0131, <code>users<\/code> tablosundaki <code>id<\/code> alan\u0131na bir d\u0131\u015f anahtar olarak ba\u011flanacakt\u0131r.<\/p>\n<pre><code>\nphp artisan make:model Comment -m\n  <\/pre>\n<p><\/code><\/p>\n<p>Olu\u015fan migration dosyas\u0131n\u0131 a\u00e7arak <code>comments<\/code> tablosunu a\u015fa\u011f\u0131daki gibi d\u00fczenleyebiliriz:<\/p>\n<pre><code>\n\/\/ database\/migrations\/XXXX_XX_XX_XXXXXX_create_comments_table.php\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n    public function up(): void\n    {\n        Schema::create('comments', function (Blueprint $table) {\n            $table->id();\n            $table->foreignId('user_id')->constrained()->onDelete('cascade');\n            $table->morphs('commentable'); \/\/ Polimorfik ili\u015fki i\u00e7in: post, product vs.\n            $table->text('content');\n            $table->timestamps();\n        });\n    }\n\n    public function down(): void\n    {\n        Schema::dropIfExists('comments');\n    }\n};\n  <\/pre>\n<p><\/code><\/p>\n<p>Burada <code>morphs(&#039;commentable&#039;)<\/code> kullanarak polimorfik bir ili\u015fki tan\u0131mlad\u0131k, bu sayede yorumlar\u0131 hem blog yaz\u0131lar\u0131na hem de \u00fcr\u00fcnlere veya farkl\u0131 modellere ba\u011flayabiliriz. Bu yakla\u015f\u0131m, sisteminizi daha esnek hale getirir. \u015eimdi, <code>User<\/code> ve <code>Comment<\/code> modelleri aras\u0131nda ili\u015fkileri tan\u0131mlayal\u0131m:<\/p>\n<pre><code>\n\/\/ app\/Models\/User.php\nnamespace App\\Models;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Laravel\\Sanctum\\HasApiTokens;\n\nclass User extends Authenticatable\n{\n    use HasApiTokens, HasFactory, Notifiable;\n\n    protected $fillable = [\n        'name',\n        'email',\n        'password',\n    ];\n\n    protected $hidden = [\n        'password',\n        'remember_token',\n    ];\n\n    protected $casts = [\n        'email_verified_at' => 'datetime',\n    ];\n\n    public function comments()\n    {\n        return $this->hasMany(Comment::class);\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<pre><code>\n\/\/ app\/Models\/Comment.php\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Comment extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n        'user_id',\n        'content',\n        'commentable_id',\n        'commentable_type',\n    ];\n\n    public function user()\n    {\n        return $this->belongsTo(User::class);\n    }\n\n    public function commentable()\n    {\n        return $this->morphTo();\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k, bir kullan\u0131c\u0131 giri\u015f yapt\u0131ktan sonra yorum g\u00f6ndermesine izin veren bir kontrolc\u00fc metodumuz olabilir. Varsayal\u0131m ki bir <code>Post<\/code> modeliniz var ve yorumlar bu g\u00f6nderilere yap\u0131l\u0131yor. \u0130lk olarak bir <code>Post<\/code> modeli olu\u015ftural\u0131m ve onun da bir polimorfik ili\u015fkisi oldu\u011funu varsayal\u0131m.<\/p>\n<pre><code>\n\/\/ app\/Models\/Post.php\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Post extends Model\n{\n    use HasFactory;\n\n    protected $fillable = ['title', 'body'];\n\n    public function comments()\n    {\n        return $this->morphMany(Comment::class, 'commentable');\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi yorum ekleme i\u015flemini y\u00f6netecek bir kontrolc\u00fc metoduna bakal\u0131m:<\/p>\n<pre><code>\n\/\/ app\/Http\/Controllers\/CommentController.php\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Comment;\nuse App\\Models\\Post; \/\/ Yorum yap\u0131lacak model, \u00f6rne\u011fin bir g\u00f6nderi\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass CommentController extends Controller\n{\n    public function store(Request $request, Post $post)\n    {\n        \/\/ Kullan\u0131c\u0131n\u0131n oturum a\u00e7m\u0131\u015f olup olmad\u0131\u011f\u0131n\u0131 kontrol et\n        if (!Auth::check()) {\n            return redirect()->route('login')->with('error', 'Yorum yapabilmek i\u00e7in giri\u015f yapmal\u0131s\u0131n\u0131z.');\n        }\n\n        $request->validate([\n            'content' => ['required', 'string', 'max:1000'],\n        ]);\n\n        $comment = $post->comments()->create([\n            'user_id' => Auth::id(),\n            'content' => $request->input('content'),\n        ]);\n\n        return back()->with('success', 'Yorumunuz ba\u015far\u0131yla eklendi.');\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>Auth::id()<\/code> metodu ile o anki giri\u015f yapm\u0131\u015f kullan\u0131c\u0131n\u0131n ID'sini al\u0131yoruz ve yorumu bu kullan\u0131c\u0131ya at\u0131yoruz. Yorum formu ise sadece giri\u015f yapm\u0131\u015f kullan\u0131c\u0131lara g\u00f6r\u00fcn\u00fcr olmal\u0131 veya giri\u015f yapmam\u0131\u015f kullan\u0131c\u0131lar i\u00e7in bir giri\u015f yapma y\u00f6nlendirmesi i\u00e7ermelidir. Bu sayede, her yorumun arkas\u0131nda do\u011frulanm\u0131\u015f bir kullan\u0131c\u0131 oldu\u011funu garanti alt\u0131na al\u0131rs\u0131n\u0131z. Bu yakla\u015f\u0131m, sadece spam'\u0131 azaltmakla kalmaz, ayn\u0131 zamanda k\u00f6t\u00fc niyetli kullan\u0131c\u0131lar\u0131n tespitini ve engellenmesini de kolayla\u015ft\u0131r\u0131r. Polimorfik ili\u015fkiler sayesinde, bu sistemi birden fazla modeliniz i\u00e7in kolayca yeniden kullanabilirsiniz. \u00d6rne\u011fin, <code>Post<\/code> yerine bir <code>Product<\/code> modeline yorum eklemek istedi\u011finizde, sadece <code>Post $post<\/code> yerine <code>Product $product<\/code> parametresini kullanman\u0131z yeterli olacakt\u0131r, geri kalan mant\u0131k b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ayn\u0131 kal\u0131r. Bu esneklik, Laravel'in geli\u015ftiricilere sundu\u011fu en b\u00fcy\u00fck avantajlardan biridir. Ayr\u0131ca, <code>onDelete(&#039;cascade&#039;)<\/code> kullanarak, bir kullan\u0131c\u0131 silindi\u011finde ona ait t\u00fcm yorumlar\u0131n otomatik olarak silinmesini sa\u011flayarak veritaban\u0131 b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korumu\u015f olursunuz.<\/p>\n<h2>Aritmetik CAPTCHA ile Spam Yorumlar\u0131 Nas\u0131l Engelleriz?<\/h2>\n<p>Kullan\u0131c\u0131 kimlik do\u011frulamas\u0131n\u0131n yan\u0131 s\u0131ra, spam botlar\u0131n\u0131 engellemenin etkili yollar\u0131ndan biri de CAPTCHA kullanmakt\u0131r. Resim tabanl\u0131, reCAPTCHA gibi harici servisler mevcut olsa da, kendi basit ve etkili aritmetik CAPTCHA'm\u0131z\u0131 Laravel i\u00e7inde olu\u015fturabiliriz. Bu y\u00f6ntem, \u00f6zellikle d\u00fc\u015f\u00fck trafikli veya hassas olmayan sistemlerde h\u0131zl\u0131 ve hafif bir \u00e7\u00f6z\u00fcm sunar. Aritmetik CAPTCHA, kullan\u0131c\u0131ya basit bir matematik problemi (\u00f6rne\u011fin, \"5 + 3 ka\u00e7t\u0131r?\") sorar ve cevab\u0131 bekler. Botlar genellikle bu t\u00fcr problemleri \u00e7\u00f6zmekte zorlan\u0131r.<\/p>\n<p>Uygulamas\u0131na gelince, \u00f6ncelikle problemi olu\u015fturup cevab\u0131 kullan\u0131c\u0131n\u0131n oturumunda (session) saklamam\u0131z gerekiyor. Yorum formunu g\u00f6steren kontrolc\u00fcn\u00fczde veya bir ara yaz\u0131l\u0131m (middleware) kullanarak bu i\u015flemi yapabilirsiniz. \u0130\u015fte \u00f6rnek bir uygulama:<\/p>\n<pre><code>\n\/\/ app\/Http\/Controllers\/CommentController.php (veya PostController i\u00e7inde)\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Session; \/\/ Session facade'\u0131n\u0131 ekledik\n\nclass CommentController extends Controller\n{\n    public function create()\n    {\n        $num1 = rand(1, 10);\n        $num2 = rand(1, 10);\n        $operator = ['+', '-', '*'][array_rand(['+', '-', '*'])]; \/\/ Rastgele operat\u00f6r se\u00e7imi\n        $answer = 0;\n\n        switch ($operator) {\n            case '+':\n                $answer = $num1 + $num2;\n                break;\n            case '-':\n                $answer = $num1 - $num2;\n                break;\n            case '*':\n                $answer = $num1 * $num2;\n                break;\n        }\n\n        Session::put('captcha_answer', $answer); \/\/ Cevab\u0131 oturumda sakla\n\n        return view('comments.create', compact('num1', 'num2', 'operator'));\n    }\n\n    public function store(Request $request, Post $post)\n    {\n        \/\/ \u00d6nceki kimlik do\u011frulama kontrol\u00fc burada da ge\u00e7erli\n        if (!Auth::check()) {\n            return redirect()->route('login')->with('error', 'Yorum yapabilmek i\u00e7in giri\u015f yapmal\u0131s\u0131n\u0131z.');\n        }\n\n        \/\/ CAPTCHA do\u011frulamas\u0131n\u0131 ekleyelim\n        $request->validate([\n            'content' => ['required', 'string', 'max:1000'],\n            'captcha' => ['required', 'numeric'],\n        ]);\n\n        if ($request->input('captcha') != Session::get('captcha_answer')) {\n            Session::forget('captcha_answer'); \/\/ Yanl\u0131\u015f cevap sonras\u0131 cevab\u0131 temizle\n            return back()->withErrors(['captcha' => 'CAPTCHA cevab\u0131 yanl\u0131\u015f. L\u00fctfen tekrar deneyin.'])->withInput();\n        }\n\n        \/\/ CAPTCHA do\u011fruysa oturumdaki cevab\u0131 temizle\n        Session::forget('captcha_answer');\n\n        \/\/ Yorumu kaydetme i\u015flemi (\u00f6nceki b\u00f6l\u00fcmden)\n        $comment = $post->comments()->create([\n            'user_id' => Auth::id(),\n            'content' => $request->input('content'),\n        ]);\n\n        return back()->with('success', 'Yorumunuz ba\u015far\u0131yla eklendi.');\n    }\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi de Blade \u015fablonumuzda CAPTCHA'y\u0131 nas\u0131l g\u00f6sterece\u011fimizi ve kullan\u0131c\u0131n\u0131n cevab\u0131n\u0131 nas\u0131l alaca\u011f\u0131m\u0131z\u0131 g\u00f6relim:<\/p>\n<pre><code>\n<!-- resources\/views\/comments\/create.blade.php veya post\/show.blade.php i\u00e7inde -->\n<form action=\"{{ route('posts.comments.store', $post) }}\" method=\"POST\">\n    @csrf\n\n    <div class=\"form-group\">\n        <label for=\"content\">Yorumunuz:<\/label>\n        <textarea name=\"content\" id=\"content\" class=\"form-control\" rows=\"4\" required><\/textarea>\n        @error('content')\n            <div class=\"text-danger\">{{ $message }}<\/div>\n        @enderror\n    <\/div>\n\n    <div class=\"form-group mt-3\">\n        <label for=\"captcha\">L\u00fctfen i\u015flemi \u00e7\u00f6z\u00fcn: <strong>{{ $num1 }} {{ $operator }} {{ $num2 }} = ?<\/strong><\/label>\n        <input type=\"number\" name=\"captcha\" id=\"captcha\" class=\"form-control\" required>\n        @error('captcha')\n            <div class=\"text-danger\">{{ $message }}<\/div>\n        @enderror\n    <\/div>\n\n    <button type=\"submit\" class=\"btn btn-primary mt-3\">Yorum Yap<\/button>\n<\/form>\n  <\/pre>\n<p><\/code><\/p>\n<div class=\"warning\">\n    <strong>G\u00fcvenlik Uyar\u0131s\u0131:<\/strong> CAPTCHA cevab\u0131n\u0131 sunucu taraf\u0131nda (oturumda) saklamak kritik \u00f6neme sahiptir. Cevab\u0131 asla gizli bir form alan\u0131nda (hidden input) g\u00f6ndermeyin, \u00e7\u00fcnk\u00fc bu, botlar\u0131n kolayca cevab\u0131 okuyup g\u00f6ndermesine olanak tan\u0131r. Her zaman sunucu taraf\u0131nda do\u011frulamay\u0131 yap\u0131n ve cevab\u0131 oturumda tutun.\n  <\/div>\n<p>Bu aritmetik CAPTCHA uygulamas\u0131, basit bot sald\u0131r\u0131lar\u0131na kar\u015f\u0131 etkili bir ilk savunma hatt\u0131 olu\u015fturur. Ancak, unutulmamal\u0131d\u0131r ki daha sofistike botlar, basit aritmetik i\u015flemleri \u00e7\u00f6zmek i\u00e7in yapay zeka veya OCR (optik karakter tan\u0131ma) kullanabilirler. Bu nedenle, y\u00fcksek g\u00fcvenlik gerektiren sistemlerde Google reCAPTCHA gibi daha geli\u015fmi\u015f \u00e7\u00f6z\u00fcmleri de\u011ferlendirmek faydal\u0131 olabilir. Ancak, \u00e7o\u011fu blog veya k\u00fc\u00e7\u00fck e-ticaret sitesi i\u00e7in bu basit aritmetik CAPTCHA yeterli korumay\u0131 sa\u011flayacakt\u0131r. Ayr\u0131ca, CAPTCHA'y\u0131 her g\u00f6nderim denemesinde yenilemek, ayn\u0131 cevab\u0131n tekrar tekrar kullan\u0131lmas\u0131n\u0131 \u00f6nleyerek g\u00fcvenli\u011fi art\u0131r\u0131r. Bu, kullan\u0131c\u0131n\u0131n sayfay\u0131 yeniledi\u011finde veya formu yeniden g\u00f6nderdi\u011finde yeni bir problemle kar\u015f\u0131la\u015faca\u011f\u0131 anlam\u0131na gelir.<\/p>\n<h3>G\u00fcvenli Yorum Formu Olu\u015fturma: Girdileri Do\u011frulama ve Temizleme<\/h3>\n<p>Bir yorum formu olu\u015ftururken, sadece kimlik do\u011frulama ve CAPTCHA yeterli de\u011fildir. Kullan\u0131c\u0131 girdilerini do\u011fru \u015fekilde do\u011frulamak ve temizlemek, XSS (Cross-Site Scripting) ve di\u011fer enjeksiyon sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in hayati \u00f6neme sahiptir. Laravel, <code>Request<\/code> nesnesi ve do\u011frulama kurallar\u0131 (validation rules) ile bu s\u00fcre\u00e7leri olduk\u00e7a kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code>\n\/\/ app\/Http\/Controllers\/CommentController.php i\u00e7indeki store metodunda\npublic function store(Request $request, Post $post)\n{\n    \/\/ ... (Auth ve CAPTCHA kontrolleri) ...\n\n    $request->validate([\n        'content' => [\n            'required',\n            'string',\n            'max:1000',\n            \/\/ \u0130leri d\u00fczey filtreleme i\u00e7in custom kurallar eklenebilir\n        ],\n        'captcha' => ['required', 'numeric'],\n    ], [\n        'content.required' => 'Yorum i\u00e7eri\u011fi bo\u015f b\u0131rak\u0131lamaz.',\n        'content.string' => 'Yorum i\u00e7eri\u011fi metin format\u0131nda olmal\u0131d\u0131r.',\n        'content.max' => 'Yorum i\u00e7eri\u011fi en fazla :max karakter olabilir.',\n        'captcha.required' => 'L\u00fctfen CAPTCHA i\u015flemini \u00e7\u00f6z\u00fcn.',\n        'captcha.numeric' => 'CAPTCHA cevab\u0131 say\u0131 olmal\u0131d\u0131r.',\n    ]);\n\n    \/\/ ... (CAPTCHA do\u011frulamas\u0131) ...\n\n    $comment = $post->comments()->create([\n        'user_id' => Auth::id(),\n        'content' => strip_tags($request->input('content')), \/\/ HTML etiketlerini temizle\n    ]);\n\n    return back()->with('success', 'Yorumunuz ba\u015far\u0131yla eklendi.');\n}\n  <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>content<\/code> alan\u0131 i\u00e7in <code>required<\/code>, <code>string<\/code> ve <code>max:1000<\/code> gibi temel kurallar tan\u0131mlad\u0131k. Bu kurallar, yorumun bo\u015f olmamas\u0131n\u0131, metin format\u0131nda olmas\u0131n\u0131 ve belirli bir karakter uzunlu\u011funu a\u015fmamas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, kullan\u0131c\u0131 dostu hata mesajlar\u0131 da ekledik. En \u00f6nemlisi, yorum i\u00e7eri\u011fini veritaban\u0131na kaydetmeden \u00f6nce <code>strip_tags()<\/code> fonksiyonunu kullanarak t\u00fcm HTML etiketlerini temizledik. Bu, XSS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 \u00e7ok \u00f6nemli bir savunma mekanizmas\u0131d\u0131r. Laravel Blade \u015fablon motoru, de\u011fi\u015fkenleri varsay\u0131lan olarak otomatik olarak ka\u00e7\u0131rd\u0131\u011f\u0131 (<code>escape<\/code>) i\u00e7in, bir yorumu g\u00f6r\u00fcnt\u00fclerken XSS riski b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azal\u0131r. Ancak, kullan\u0131c\u0131lar\u0131n HTML veya Markdown gibi zengin metin formatlar\u0131 kullanmas\u0131na izin vermek isterseniz, daha geli\u015fmi\u015f bir k\u00fct\u00fcphane olan HTML Purifier gibi \u00e7\u00f6z\u00fcmler kullanman\u0131z gerekebilir. Bu t\u00fcr k\u00fct\u00fcphaneler, izin verilen HTML etiketlerini belirlemenize ve geri kalan\u0131n\u0131 g\u00fcvenli bir \u015fekilde temizlemenize olanak tan\u0131r.<\/p>\n<div class=\"info\">\n    <strong>Mobil Uyumlu Yorum Formu:<\/strong><\/p>\n<p>Yorum formu, mobil cihazlarda da sorunsuz bir \u015fekilde kullan\u0131labilmelidir. Bunun i\u00e7in responsive tasar\u0131m prensiplerini uygulamak \u00f6nemlidir. CSS'de medya sorgular\u0131 (media queries) kullanarak form elemanlar\u0131n\u0131n boyutlar\u0131n\u0131 ve d\u00fczenini ekran boyutuna g\u00f6re ayarlayabilirsiniz:<\/p>\n<pre><code>\n<style>\n  .form-group {\n    margin-bottom: 1rem;\n  }\n  .form-control {\n    width: 100%;\n    padding: 0.75rem 1rem;\n    font-size: 1rem;\n    line-height: 1.5;\n    border-radius: 0.25rem;\n    border: 1px solid #ced4da;\n  }\n  .btn {\n    display: inline-block;\n    font-weight: 400;\n    color: #212529;\n    text-align: center;\n    vertical-align: middle;\n    cursor: pointer;\n    background-color: #007bff;\n    color: #fff;\n    border: 1px solid #007bff;\n    padding: 0.375rem 0.75rem;\n    font-size: 1rem;\n    line-height: 1.5;\n    border-radius: 0.25rem;\n  }\n  @media (max-width: 768px) {\n    .form-group label {\n      font-size: 0.9rem;\n    }\n    .form-control {\n      padding: 0.5rem 0.75rem;\n      font-size: 0.9rem;\n    }\n    .btn {\n      width: 100%;\n      margin-top: 1rem;\n    }\n  }\n<\/style>\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, form elemanlar\u0131n\u0131n k\u00fc\u00e7\u00fck ekranlarda daha uygun boyutlara sahip olmas\u0131n\u0131 sa\u011flar, b\u00f6ylece mobil kullan\u0131c\u0131lar da rahat\u00e7a yorum yapabilir.<\/p>\n<\/p><\/div>\n<p>CSRF (Cross-Site Request Forgery) sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma i\u00e7in Laravel, t\u00fcm POST formlar\u0131nda <code>@csrf<\/code> Blade direktifini kullan\u0131r. Bu direktif, formunuza otomatik olarak gizli bir CSRF token'\u0131 ekler ve Laravel, gelen isteklerde bu token'\u0131n ge\u00e7erlili\u011fini kontrol eder. Bu sayede, k\u00f6t\u00fc niyetli bir sitenin, kullan\u0131c\u0131n\u0131n bilgisi d\u0131\u015f\u0131nda uygulaman\u0131za istek g\u00f6ndermesi engellenmi\u015f olur. Bu \u00fc\u00e7 temel bile\u015fen \u2013 do\u011frulama, temizleme ve CSRF korumas\u0131 \u2013 g\u00fcvenli bir yorum formu i\u00e7in vazge\u00e7ilmezdir. Her zaman kullan\u0131c\u0131 girdilerine \u015f\u00fcpheyle yakla\u015f\u0131n ve onlar\u0131 veritaban\u0131na kaydetmeden veya sayfada g\u00f6r\u00fcnt\u00fclemeden \u00f6nce gerekli t\u00fcm g\u00fcvenlik kontrollerinden ge\u00e7irdi\u011finizden emin olun. Bu titizlik, sitenizin uzun vadeli g\u00fcvenli\u011fini garanti alt\u0131na alacakt\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey G\u00fcvenlik \u0130\u00e7in Ek \u0130pu\u00e7lar\u0131 Nelerdir?<\/h2>\n<p>Temel kimlik do\u011frulama, CAPTCHA ve form do\u011frulamas\u0131 ile \u00f6nemli bir g\u00fcvenlik katman\u0131 olu\u015fturmu\u015f olsak da, daha diren\u00e7li bir sistem i\u00e7in ileri d\u00fczey g\u00fcvenlik \u00f6nlemlerini de d\u00fc\u015f\u00fcnmeliyiz. Bu ipu\u00e7lar\u0131, \u00f6zellikle y\u00fcksek trafikli veya daha fazla risk alt\u0131nda olan web siteleri i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<ol>\n<li>\n      <strong>Rate Limiting (\u0130stek S\u0131n\u0131rland\u0131rma):<\/strong> Kullan\u0131c\u0131lar\u0131n veya botlar\u0131n belirli bir zaman diliminde yapabilece\u011fi istek say\u0131s\u0131n\u0131 s\u0131n\u0131rlamak, brute-force sald\u0131r\u0131lar\u0131n\u0131 ve a\u015f\u0131r\u0131 y\u00fcklenmeyi (DoS - Denial of Service) engellemek i\u00e7in etkilidir. Laravel, <code>throttle<\/code> middleware'\u0131 ile bu \u00f6zelli\u011fi kolayca sa\u011flar. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n yorum g\u00f6nderme iste\u011fini dakikada 5 ile s\u0131n\u0131rlayabilirsiniz:<\/p>\n<pre><code>\n\/\/ app\/Http\/Kernel.php i\u00e7inde (veya route tan\u0131m\u0131n\u0131zda)\nprotected $middlewareAliases = [\n    \/\/ ...\n    'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n];\n\n\/\/ routes\/web.php\nRoute::middleware(['auth', 'throttle:5,1'])->group(function () {\n    Route::post('\/posts\/{post}\/comments', [CommentController::class, 'store'])->name('posts.comments.store');\n});\n      <\/pre>\n<p><\/code><\/p>\n<p>Burada <code>throttle:5,1<\/code> ifadesi, bir dakikada en fazla 5 istek yap\u0131labilece\u011fini belirtir. Bu, ayn\u0131 kullan\u0131c\u0131n\u0131n veya IP adresinin k\u0131sa s\u00fcrede \u00e7ok say\u0131da yorum g\u00f6ndermesini engelleyerek spam olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<\/p>\n<\/li>\n<li>\n      <strong>\u0130\u00e7erik Denetimi (Content Moderation):<\/strong> Otomatik veya manuel i\u00e7erik denetimi, uygunsuz, k\u00fcf\u00fcrl\u00fc veya yasa d\u0131\u015f\u0131 yorumlar\u0131n yay\u0131nlanmas\u0131n\u0131 engeller. Otomatik denetim i\u00e7in kelime filtreleri (\u00f6rne\u011fin, \"purify\" veya \"bad-words\" gibi PHP paketleri) veya makine \u00f6\u011frenimi tabanl\u0131 servisler kullan\u0131labilir. Manuel denetim, bir y\u00f6neticinin yorumlar\u0131 onaylamadan \u00f6nce g\u00f6zden ge\u00e7irmesini gerektirir. Yorum modelinize bir <code>is_approved<\/code> veya <code>status<\/code> alan\u0131 ekleyerek bunu y\u00f6netebilirsiniz.<\/p>\n<pre><code>\n\/\/ comments tablosuna yeni bir s\u00fctun eklemek i\u00e7in\nphp artisan make:migration add_status_to_comments_table --table=comments\n\n\/\/ database\/migrations\/XXXX_XX_XX_XXXXXX_add_status_to_comments_table.php\npublic function up(): void\n{\n    Schema::table('comments', function (Blueprint $table) {\n        $table->enum('status', ['pending', 'approved', 'rejected'])->default('pending')->after('content');\n    });\n}\npublic function down(): void\n{\n    Schema::table('comments', function (Blueprint $table) {\n        $table->dropColumn('status');\n    });\n}\n      <\/pre>\n<p><\/code><\/p>\n<p>Daha sonra kontrolc\u00fcn\u00fczde, <code>store<\/code> metodu varsay\u0131lan olarak <code>pending<\/code> stat\u00fcs\u00fcnde kaydedip y\u00f6netici panelinde onay bekleyebilirsiniz.<\/p>\n<\/li>\n<li>\n      <strong>IP Kara Listesi (IP Blacklisting):<\/strong> Tekrar tekrar spam yapan veya k\u00f6t\u00fc niyetli aktivitelerde bulunan IP adreslerini engellemek, uzun vadeli g\u00fcvenlik i\u00e7in \u00f6nemlidir. Laravel'de bir middleware olu\u015fturarak veya g\u00fcvenlik duvar\u0131 seviyesinde bu engellemeyi yapabilirsiniz. Ancak, IP adreslerinin dinamik olarak de\u011fi\u015febilece\u011fi veya proxy'ler arac\u0131l\u0131\u011f\u0131yla gizlenebilece\u011fi unutulmamal\u0131d\u0131r.\n    <\/li>\n<li>\n      <strong>Yorumlar \u0130\u00e7in Soft Deletes:<\/strong> Yorumlar\u0131 do\u011frudan silmek yerine \"soft delete\" (yumu\u015fak silme) kullanmak, yanl\u0131\u015fl\u0131kla silinen yorumlar\u0131 geri y\u00fckleme olana\u011f\u0131 sunar ve denetim ama\u00e7l\u0131 veri kayd\u0131n\u0131 tutar. <code>Comment<\/code> modelinize <code>SoftDeletes<\/code> trait'ini ekleyerek bu \u00f6zelli\u011fi kullanabilirsiniz.<\/p>\n<pre><code>\n\/\/ app\/Models\/Comment.php\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Comment extends Model\n{\n    use HasFactory, SoftDeletes;\n    \/\/ ...\n}\n      <\/pre>\n<p><\/code><\/p>\n<p>Ve migration dosyan\u0131za <code>deleted_at<\/code> s\u00fctununu eklemeyi unutmay\u0131n: <code>Schema::table(&#039;comments&#039;, function (Blueprint $table) { $table->softDeletes(); });<\/code><\/p>\n<\/li>\n<li>\n      <strong>API G\u00fcvenli\u011fi:<\/strong> E\u011fer yorum sistemi bir API arac\u0131l\u0131\u011f\u0131yla \u00e7al\u0131\u015f\u0131yorsa, API anahtarlar\u0131, OAuth2 veya JWT (JSON Web Tokens) gibi daha geli\u015fmi\u015f kimlik do\u011frulama y\u00f6ntemleri kullanmak \u00f6nemlidir. Laravel Passport veya Laravel Sanctum bu konuda size yard\u0131mc\u0131 olabilir.\n    <\/li>\n<\/ol>\n<div class=\"expert-tip\">\n    <strong>Uzman \u0130pucu: S\u00fcrekli \u0130zleme ve Loglama<\/strong><\/p>\n<p>G\u00fcvenli bir sistem kurmak kadar, onun g\u00fcvenli\u011fini s\u00fcrekli olarak izlemek de \u00f6nemlidir. Laravel'in loglama mekanizmas\u0131n\u0131 kullanarak, \u015f\u00fcpheli aktiviteleri (\u00f6rne\u011fin, ba\u015far\u0131s\u0131z CAPTCHA denemeleri, \u00e7ok say\u0131da istek, engellenen IP'ler) kaydedin. Bu loglar\u0131 d\u00fczenli olarak g\u00f6zden ge\u00e7irmek, olas\u0131 sald\u0131r\u0131lar\u0131 erken a\u015famada tespit etmenizi sa\u011flar. Ayr\u0131ca, uygulaman\u0131z\u0131n ve sunucunuzun g\u00fcvenlik yamalar\u0131n\u0131 d\u00fczenli olarak g\u00fcncelledi\u011finizden emin olun.<\/p>\n<\/p><\/div>\n<p><strong>Vaka Analizi: B\u00fcy\u00fck Bir Haber Sitesinin Yorum Sistemini G\u00fc\u00e7lendirmesi<\/strong><\/p>\n<p>\u00d6nde gelen bir haber portal\u0131, y\u00fcksek trafik ve etkile\u015fim nedeniyle s\u00fcrekli spam yorumlarla ve bazen de k\u00f6t\u00fc niyetli i\u00e7eriklerle m\u00fccadele ediyordu. Ba\u015flang\u0131\u00e7ta sadece basit bir kimlik do\u011frulama sistemi (e-posta\/\u015fifre) kullan\u0131yorlard\u0131. Ancak botlar, sahte hesaplar olu\u015fturarak veya ele ge\u00e7irilmi\u015f hesaplar\u0131 kullanarak sisteme s\u0131zmay\u0131 ba\u015far\u0131yordu. Bu durum, portal\u0131n itibar\u0131n\u0131 zedeliyor ve manuel denetim ekibine b\u00fcy\u00fck y\u00fck bindiriyordu. \u00c7\u00f6z\u00fcm olarak, ekip mevcut Laravel yorum sistemine a\u015fa\u011f\u0131daki ek g\u00fcvenlik katmanlar\u0131n\u0131 entegre etmeye karar verdi:<\/p>\n<ul>\n<li><strong>Aritmetik CAPTCHA:<\/strong> Her yorum g\u00f6nderim formuna, basit ama etkili bir aritmetik CAPTCHA eklendi. Bu, botlar\u0131n otomatik olarak yorum g\u00f6nderme oran\u0131n\u0131 %70 oran\u0131nda azaltt\u0131.<\/li>\n<li><strong>Geli\u015fmi\u015f Rate Limiting:<\/strong> Kullan\u0131c\u0131 bazl\u0131 ve IP bazl\u0131 rate limiting mekanizmalar\u0131 uyguland\u0131. Her IP adresinden veya her kay\u0131tl\u0131 kullan\u0131c\u0131dan dakikada belirli say\u0131da yorum g\u00f6nderilmesine izin verildi. Bu, ani spam dalgalar\u0131n\u0131 ve potansiyel DoS sald\u0131r\u0131lar\u0131n\u0131 engelledi.<\/li>\n<li><strong>Anahtar Kelime Filtresi ve Otomatik Denetim:<\/strong> Yorum i\u00e7eriklerini tarayan ve belirli k\u00fcf\u00fcrl\u00fc veya uygunsuz kelimeleri i\u00e7eren yorumlar\u0131 otomatik olarak \"beklemeye\" alan bir sistem devreye al\u0131nd\u0131. Bu yorumlar, bir edit\u00f6r taraf\u0131ndan manuel olarak onaylanana kadar yay\u0131nlanmad\u0131.<\/li>\n<li><strong>Kullan\u0131c\u0131 \u015eikayet Sistemi:<\/strong> Kullan\u0131c\u0131lar\u0131n uygunsuz bulduklar\u0131 yorumlar\u0131 rapor edebilecekleri bir \"\u015eikayet Et\" butonu eklendi. Bu \u015fikayetler, denetim ekibine \u00f6ncelikli olarak g\u00f6sterilerek h\u0131zl\u0131 m\u00fcdahale sa\u011fland\u0131.<\/li>\n<\/ul>\n<p>Bu entegre yakla\u015f\u0131m sayesinde, haber portal\u0131 yorum b\u00f6l\u00fcm\u00fcndeki spam ve k\u00f6t\u00fc niyetli i\u00e7erik miktar\u0131n\u0131 %90'\u0131n \u00fczerinde azaltt\u0131. Denetim ekibinin i\u015f y\u00fck\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde hafifledi ve portal\u0131n kullan\u0131c\u0131 toplulu\u011fu, daha temiz ve g\u00fcvenli bir etkile\u015fim ortam\u0131na kavu\u015ftu. Bu vaka analizi, \u00e7ok katmanl\u0131 bir g\u00fcvenlik yakla\u015f\u0131m\u0131n\u0131n, \u00f6zellikle yo\u011fun kullan\u0131lan platformlarda ne kadar etkili olabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Her zaman \"derinlemesine savunma\" prensibini benimseyerek, birden fazla g\u00fcvenlik katman\u0131n\u0131 bir araya getirmek, sisteminizi \u00e7ok daha diren\u00e7li hale getirecektir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, Laravel kullanarak g\u00fcvenli bir yorum sistemi olu\u015fturman\u0131n temel ad\u0131mlar\u0131n\u0131 ve ileri d\u00fczey tekniklerini derinlemesine inceledik. Kullan\u0131c\u0131 kimlik do\u011frulamas\u0131ndan ba\u015flayarak, spam botlar\u0131n\u0131 engellemek i\u00e7in aritmetik CAPTCHA uygulamas\u0131n\u0131 ele ald\u0131k. Ayr\u0131ca, form do\u011frulamas\u0131, girdi temizleme, CSRF korumas\u0131 gibi kritik g\u00fcvenlik mekanizmalar\u0131n\u0131n yan\u0131 s\u0131ra, rate limiting, i\u00e7erik denetimi ve soft delete gibi ileri d\u00fczey ipu\u00e7lar\u0131n\u0131 da de\u011ferlendirdik. Amac\u0131m\u0131z, sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda d\u0131\u015f tehditlere kar\u015f\u0131 g\u00fc\u00e7l\u00fc ve diren\u00e7li bir yorum sistemi in\u015fa etmenize yard\u0131mc\u0131 olmakt\u0131. Unutmayal\u0131m ki, web g\u00fcvenli\u011fi s\u00fcrekli bir s\u00fcre\u00e7tir ve d\u00fczenli g\u00fcncellemeler, izleme ve yeni tehditlere kar\u015f\u0131 adaptasyon gerektirir. Laravel'in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7lar ve do\u011fru stratejilerle, kullan\u0131c\u0131lar\u0131n\u0131z i\u00e7in g\u00fcvenli ve keyifli bir etkile\u015fim alan\u0131 yaratabilirsiniz. Web sitenizin g\u00fcvenli\u011fi, kullan\u0131c\u0131lar\u0131n\u0131z\u0131n size olan g\u00fcveninin temelini olu\u015fturur; bu nedenle bu konuya yat\u0131r\u0131m yapmak, uzun vadede mutlaka kar\u015f\u0131l\u0131\u011f\u0131n\u0131 verecektir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt><strong>1. Neden haz\u0131r CAPTCHA servisleri yerine aritmetik CAPTCHA kullanmal\u0131y\u0131m?<\/strong><\/dt>\n<dd>Aritmetik CAPTCHA, \u00f6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projelerde, harici bir ba\u011f\u0131ml\u0131l\u0131k gerektirmemesi, h\u0131zl\u0131 entegrasyonu ve sunucu y\u00fck\u00fcn\u00fc art\u0131rmamas\u0131 nedeniyle tercih edilebilir. Kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan da \u00e7o\u011fu zaman daha az rahats\u0131z edicidir. Ancak, \u00e7ok y\u00fcksek g\u00fcvenlik gereksinimleri olan veya sofistike bot sald\u0131r\u0131lar\u0131na maruz kalan sistemlerde Google reCAPTCHA gibi daha geli\u015fmi\u015f \u00e7\u00f6z\u00fcmler daha uygun olabilir.<\/dd>\n<dt><strong>2. Yorumlar\u0131 otomatik olarak denetlemek m\u00fcmk\u00fcn m\u00fc?<\/strong><\/dt>\n<dd>Evet, m\u00fcmk\u00fcnd\u00fcr. Kelime tabanl\u0131 filtreleme (profanity filter) sistemleri veya makine \u00f6\u011frenimi tabanl\u0131 do\u011fal dil i\u015fleme (NLP) API'leri kullanarak yorumlar\u0131 otomatik olarak denetleyebilirsiniz. Bu sistemler, belirli anahtar kelimeleri, c\u00fcmle yap\u0131lar\u0131n\u0131 veya tonlar\u0131 alg\u0131layarak uygunsuz yorumlar\u0131 i\u015faretleyebilir veya direkt olarak yay\u0131nlamayabilir. Laravel i\u00e7in haz\u0131rlanm\u0131\u015f <code>Purify<\/code> gibi paketler, HTML i\u00e7eri\u011fini temizleme ve k\u00f6t\u00fc niyetli etiketleri kald\u0131rma konusunda yard\u0131mc\u0131 olabilir.<\/dd>\n<dt><strong>3. SQL Injection riskine kar\u015f\u0131 Laravel ORM (Eloquent) yeterli mi?<\/strong><\/dt>\n<dd>Laravel'in Eloquent ORM'si, Prepared Statements (Haz\u0131rlanm\u0131\u015f \u0130fadeler) kulland\u0131\u011f\u0131 i\u00e7in SQL Injection sald\u0131r\u0131lar\u0131na kar\u015f\u0131 do\u011fal olarak olduk\u00e7a diren\u00e7lidir. Eloquent ile yap\u0131lan sorgularda kullan\u0131c\u0131 girdileri otomatik olarak ka\u00e7\u0131r\u0131l\u0131r (escaped) ve veritaban\u0131na do\u011frudan metin olarak g\u00f6nderilmez. Ancak, do\u011frudan <code>DB::raw()<\/code> metodu veya string bir sorgu kullan\u0131rken kullan\u0131c\u0131 girdilerini do\u011fru \u015fekilde sanitasyon yapmazsan\u0131z risk olu\u015fabilir. Bu nedenle, her zaman ORM'yi kullanmaya \u00f6zen g\u00f6sterin ve ham SQL kullan\u0131rken \u00e7ok dikkatli olun.<\/dd>\n<dt><strong>4. Kullan\u0131c\u0131 yorumlar\u0131n\u0131 silmek yerine neden soft delete kullanmal\u0131y\u0131m?<\/strong><\/dt>\n<dd>Soft delete (yumu\u015fak silme), yorumlar\u0131n veritaban\u0131ndan tamamen silinmek yerine, <code>deleted_at<\/code> s\u00fctununa bir zaman damgas\u0131 eklenerek \"pasif\" hale getirilmesidir. Bu yakla\u015f\u0131m, yanl\u0131\u015fl\u0131kla silinen yorumlar\u0131 kolayca geri y\u00fcklemenizi sa\u011flar. Ayr\u0131ca, denetim veya yasal ama\u00e7lar i\u00e7in yorum ge\u00e7mi\u015fini tutman\u0131z gerekti\u011finde \u00f6nemli bir avantaj sunar. Geriye d\u00f6n\u00fck analizler veya \u015fikayetleri incelemek i\u00e7in veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc korur.<\/dd>\n<dt><strong>5. Yorum sisteminde performans sorunlar\u0131 ya\u015farsam ne yapmal\u0131y\u0131m?<\/strong><\/dt>\n<dd>Performans sorunlar\u0131 genellikle veritaban\u0131 sorgular\u0131ndan veya \u00e7ok say\u0131da yorumun ayn\u0131 anda y\u00fcklenmesinden kaynaklan\u0131r. \u00d6ncelikle, ili\u015fkileri (\u00f6rne\u011fin, yorumlar\u0131 getiren g\u00f6nderilerle kullan\u0131c\u0131lar\u0131 getiren yorumlar) <code>with()<\/code> metoduyla eager loading kullanarak optimize edin. Yorumlar \u00e7ok fazlaysa, sayfaland\u0131rma (pagination) kullanarak t\u00fcm yorumlar\u0131 tek seferde y\u00fcklemek yerine belirli say\u0131da yorum g\u00f6stermelisiniz. Ayr\u0131ca, veritaban\u0131 indekslerini do\u011fru \u015fekilde kulland\u0131\u011f\u0131n\u0131zdan emin olun (<code>user_id<\/code>, <code>commentable_id<\/code>, <code>commentable_type<\/code> gibi alanlarda). Gerekirse, yorum \u00f6nbellekleme (caching) tekniklerini de de\u011ferlendirebilirsiniz.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli&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":[133],"tags":[],"class_list":{"0":"post-31781","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","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>Laravel&#039;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA<\/title>\n<meta name=\"description\" content=\"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel&#039;in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.\" \/>\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\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel&#039;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA\" \/>\n<meta property=\"og:description\" content=\"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel&#039;in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-13T20:31:19+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Laravel&#8217;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA\",\"datePublished\":\"2025-10-13T20:31:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\"},\"wordCount\":3406,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PHP\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\",\"name\":\"Laravel'de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-13T20:31:19+00:00\",\"description\":\"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel'in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel&#8217;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA\"}]},{\"@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":"Laravel'de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA","description":"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel'in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.","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\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/","og_locale":"tr_TR","og_type":"article","og_title":"Laravel'de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA","og_description":"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel'in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-13T20:31:19+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Laravel&#8217;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA","datePublished":"2025-10-13T20:31:19+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/"},"wordCount":3406,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PHP"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/","url":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/","name":"Laravel'de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-13T20:31:19+00:00","description":"Web sitenizde canl\u0131 bir etkile\u015fim alan\u0131 yaratmak harika bir fikir, ancak yorum b\u00f6l\u00fcmleri genellikle spam mesajlar\u0131n, k\u00f6t\u00fc niyetli sald\u0131r\u0131lar\u0131n ve istenmeyen i\u00e7eriklerin hedefi haline gelebiliyor. Peki, Laravel ile kullan\u0131c\u0131 kimli\u011fi do\u011frulama ve aritmetik CAPTCHA kullanarak bu sorunlar\u0131n \u00fcstesinden nas\u0131l gelebilir, hem kullan\u0131c\u0131 deneyimini art\u0131r\u0131p hem de sitenizin g\u00fcvenli\u011fini nas\u0131l sa\u011flayabiliriz? Bu makalede, bu \u00f6nemli konuyu ad\u0131m ad\u0131m ele alacak, Laravel'in sundu\u011fu g\u00fc\u00e7l\u00fc ara\u00e7larla g\u00fcvenli bir yorum sistemi in\u015fa etmenin yollar\u0131n\u0131 ke\u015ffedece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/laravelde-guvenli-yorum-sistemi-kimlik-dogrulama-ve-aritmetik-captcha\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Laravel&#8217;de G\u00fcvenli Yorum Sistemi: Kimlik Do\u011frulama ve Aritmetik CAPTCHA"}]},{"@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\/31781","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=31781"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31781\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}