
Turkish: 
Siteler arası istek sahteciliği, CSRF, üçüncü büyük web saldırısıdır. Siteler arası komut dosyası çalıştırma hakkında konuştum
geçmişte. SQL enjeksiyonu hakkında konuştum. Bu üç numara ve daha az bilinen olan.
Web tarayıcıları bir şeylere oldukça güveniyor. Bunu daha önce de söyledim: çalıştırmaları için onlara bir kod verirseniz,
buna değer yargısı vermezler. Kötü amaçlı olup olmadığını söyleyemezler. Sadece koşacaklar.
Şimdi, bu internetin ilk günlerinde, çevrimiçi bankacılığın olmadığı ve bunun gibi şeyler olduğu zaman tamam oldu.
Yapabileceğin en kötü şey bir yere yorum yapmak. Bugünlerde biraz daha karmaşık.
Web, ileri ve geri gönderilen veriler üzerinde çalışır ve bu veriler birkaç şekilde kodlanabilir.
Bir GET isteği denilen şeye sahip olabilirsiniz ve bu, eğer masaüstünde kullanıyorsanız, bakarsanız,
ve tarayıcı adres çubuğuna bakın, göreceksiniz: youtube.com/watch, sayfanın adı,

English: 
Cross site request forgery, CSRF, is the third big web attack. I've talked about cross site scripting
in the past. I've talked about SQL injection. This is number three, and it's the lesser-known one.
Web browsers are fairly trusting things. I've said this before: if you give them some code to run,
they don't cast a value judgment on it. They can't tell if it's malicious. They will just run it.
Now, this was kind of okay in the early days of the web, when there wasn't online banking and things like that.
The worst you could do is put a comment somewhere. Nowadays, bit more complicated.
The web runs on data being sent back and forth, and that data can be encoded in a couple of ways.
You can have what's called a GET request, and that's like if you look up, if you're using this on desktop,
and you look up at the browser address bar, you'll see: youtube.com/watch, that's the name of the page,

Turkish: 
ve sonra bir? v = bir karakter dizisi.
Bu, izleme sayfasına gideceğiniz ve geri kalanının çıkarılıp gönderileceği anlamına gelir.
YouTube'daki mantığa göre, ah, bu videoyu istiyorum, bu yüzden bu ayrıntıları veritabanından çıkarın.
Bunu yapmanın başka bir yolu var, formun olduğu türden POST diye adlandırılan
altındaki bir düğme ile. Ve "git" e bastığınızda, tüm bu veriler toplanır ve gönderilir
istekle birlikte, ancak adres çubuğunda değil. Ve geleneksel olarak, eğer adres çubuğuna koyarsanız,
veri almak için tasarlanmıştır. Buna GET denir. Bu, bu YouTube URL’sini alabileceğiniz anlamına gelir.
ve kopyalayıp başka bir yere yapıştırın. Ve sadece bir formda "git" e tıkladığınızda olduğu gibi verileri bir araya getirmek,
POST olarak adlandırılır. Ve bu, bir zamanlar olan şeyleri yazmak içindi. Böylece yenilediğinizde
veya aynı sayfaya geri dönün, aynı şeyi iki kez yapmaz. Yani bir yorum girerseniz,
yorumunuzun tüm ayrıntılarını URL çubuğuna koymaz ve bunu bir arkadaşınıza kopyalayıp yapıştıramazsınız,

English: 
and then a ?v= a string of characters.
That means that you're going to the watch page, and then the rest of that gets stripped off and sent
to the logic at YouTube which says, oh, I want this video, so pull these details out of the database.
There's another way of doing that, called POST, which is the kind of thing where you have a form
with a button at the bottom of it. And when you hit "go", then all that data gets bundled up and sent
along with the request, but not in the address bar. And traditionally, if you put it in the address bar,
it's designed for fetching data. It's called a GET. So that means that you can take this YouTube URL,
and copy and paste it to somewhere else. And just bundling the data up, like when you click "go" on a form,
is called a POST. And that's meant for writing things, things that happen once. So that when you hit refresh
or go back to the same page, it doesn't do the same thing twice. So if you enter a comment,
it doesn't put all your comment's details in the URL bar, and you can't copy and paste that to a friend,

English: 
and they all post the same comment. And that's reasonably good for the early days of the web,
but since then, it's got a bit more complicated. Let's say you have a form on your website for an online bank.
So let's design a really bad online bank form. Let's have, send some money from your account
to this account number, and send this much. And then there's a "go" button. And let's say that
as long as you're logged in, as long as you've been to all the authentication checks, and used that little
chip & PIN device that gives you a password to type in, you've got access to that form.
You type in the account number, you type in how much you're transmitting, you select "go."
First of all, this won't use a GET request. It won't appear up top like YouTube does.
It'll bundle it up in a POST, it'll send the request, and your bank will send back that it's done.

Turkish: 
ve hepsi aynı yorumu yayınlar. Ve bu webin ilk günleri için oldukça iyi,
ama o zamandan beri biraz daha karmaşık. Diyelim ki bir internet bankası için web sitenizde bir form var.
Öyleyse gerçekten kötü bir çevrimiçi banka formu tasarlayalım. Hadi, hesabınızdan biraz para gönderelim
bu hesap numarasına ve bu kadarı gönderin. Ve sonra bir "git" düğmesi var. Ve diyelim ki
Giriş yaptığınız sürece, tüm kimlik doğrulama kontrollerinde bulunduğunuz ve o kadar az kullandığınız sürece
girmeniz için bir şifre veren yonga ve PIN cihazı, bu forma erişiminiz var.
Hesap numarasını girin, ne kadar yayınladığınızı yazın, "git" i seçin.
Her şeyden önce, bu bir GET isteğini kullanmaz. YouTube'un yaptığı gibi görünmüyor.
Bir POST'a toparlar, isteği gönderir ve bankanız bunu yapıldığını geri gönderir.

Turkish: 
Ancak sorun şu ki, bu biçim, neredeyse halka açık. Nasıl tasarlandığını biliyorsun. Öyleyse kurduğunuzu düşünelim
Üzerinde bu forma sahip başka bir yerde sahte bir web sayfası. Ve belki, sadece belki, onlardan bazılarını saklıyorsun
Ayrıntılar, bu yüzden zaten girildiler. Bu yüzden zaten hesap numaranızda var ve 1.000 £.
ve sonra birisi gelip web sitenize yorum yapmak istiyorlarsa -
Öyleyse gerçekten zararlı bir blog tasarlayalım.
Hadi, "Müthiş Blogum" diyelim.
İnsanların yorum yapmaktan hoşlanacakları gerçekten enflamatuar içerikler yazalım.
Ve burada, bir yorum kutusu.
Ama burada, göremedikleri bir yerde, hatta tamamen görünmez
hesap numaranızla önceden doldurulmuş olan 'hesap numarası' yazan bir kutu; 'miktar', bin lira.
Yüzlerce yazdım. Uhm, yüz pound.
Çünkü görünüşe göre elimde beynimden daha az hırs var.
Ve o 'git' düğmesine tıkladığınızda, Müthiş Bloguma gitmiyor.
Gerçekten kötü tasarlanmış çevrimiçi bankaya gidiyor.

English: 
But the trouble is, that form is, well, almost public. You know how it's designed. So let's imagine you set up
a fake webpage somewhere else that has that form on it. And maybe, just maybe, you hide some of those
details, so they're already typed in. So it already has your account number in it, and, say, £1,000.
and then when someone comes along, and they want to put a comment on your website—
So let's design a really malicious blog.
Let's, let's call it "My Awesome Blog".
Let's write some really inflammatory content that people will love to comment on.
And here, is a comment box.
But off here, offscreen where they can't see it, or even completely invisible,
is a box that says 'account number', prefilled with your account number; 'amount', a thousand pounds.
I've written a hundred. Uhm, a hundred pounds.
'Cause apparently my hand has lower ambitions than my brain does.
And when you click that 'go' button, it's not going to My Awesome Blog.
It goes to the really badly designed online bank.

Turkish: 
Muhtemelen diyor ki: oh! Burada bir isteğimiz var!
Bütün bu saçmalıkların ne anlama geldiğini bilmiyorum, ama bakın, bir hesap numaramız var, biraz paramız var - aktarın!
Çünkü biz zaten yetkilendirildik.
Çünkü sıkıldığınız sırada o çevrimiçi bankaya başka bir sekmede giriş yaptınız. Ayrıca...
Harika. Para gitti.
Ve bundan daha kötüleşiyor. Çünkü fark ettiyseniz, YouTube’a bir yorum yazdığınızda,
"Gönder" i tıklayın. Web sayfasının ilk günlerinde olduğu gibi sayfanın tamamını geri yüklemiyor.
Şimdi, tüm arka planda sessizce yapar.
Ve sadece "Evet" diyerek bir şey geri gönderir.
“Bu iyi. Endişelenme.”
Bu da bununla işe yarar.
'Git' düğmesine basmanıza bile gerek kalmaz.
Sitemi yüklediğimde, (kötü amaçlı) Harika Blogum,
yalnızca arka planda bu formu oluşturur ve bu isteği gönderir.
Tarayıcılarda sizi bu işlemi engellemek için tasarlanmış birkaç şey var, ancak bunların çevresinde yollar var.
Şimdi, bu açıkça oldukça büyük bir problem.

English: 
Which probably says: oh! We've got a request here!
Don't know what this all blog nonsense is about, but look, we've got an account number, we've got some money - transfer it!
Because we've already been authorized.
Because you logged in to that online bank in another tab, while you were bored. And, well...
Great. The money is gone.
And it gets worse than that. Because, if you've noticed, when you type a comment on YouTube,
You click "Post". It doesn't load the whole page back, like it used to in the early days of the web.
Now, it does it all in the background, silently.
And just sends a thing back, saying "Yeah."
"That's fine. No worries."
Well, that would work with this too.
You wouldn't even need to click the 'go' button.
It could just be that when I load up my site, My (malicious) Awesome Blog,
it just creates that form in the background and sends off that request.
There's a few things in browsers designed to stop you from doing that, but there are ways around them.
Now, that's obviously quite a big problem.

English: 
Online banks are generally not designed that way, unless they are designed incompetently.
But a lot of web forums, a lot of smaller sites have problems like that.
If you've ever designed something with a delete your account button,
then frequently, it just goes to something like /delete. With maybe, you know, ?confirm=true on it.
And you assume that the only time that form would be visible, is when the user is logged in,
and has clicked: No, I really want to delete my account. I could copy that 'delete your account' form
and just put it in the background of my completely irrelevant web page somewhere else.
And you wouldn't even see if it fired, because it's all happening in the background using modern web technologies.
And, you wouldn't notice. It would delete your account quietly in the background because that form,
that 'delete you account' form or that transfer the money form, hasn't checked where the request is coming from.
There was something in what's called HTTP, the hypertext transfer protocol,
the very basics of the web, designed to stop this and it's called the Referer header.

Turkish: 
Çevrimiçi bankalar, yetersiz tasarlanmadıkça, genellikle bu şekilde tasarlanmamaktadır.
Ancak bir çok web forumu, bir çok küçük sitenin buna benzer problemleri var.
Hesabınızı silme düğmesiyle bir şey tasarladıysanız,
sonra sık sık, sadece / delete gibi bir şeye gider. Belki, bilirsin,? Confirm = bunda doğru.
Ve bu formun tek görülebildiği zamanın, kullanıcının giriş yaptığı zaman olduğunu varsayıyorsunuz.
ve tıkladı: Hayır, hesabımı gerçekten silmek istiyorum. Bu 'hesabınızı silin' formunu kopyalayabilirim
ve tamamen ilgisiz web sayfamın arka planına başka bir yere koy.
Ve ateş edip etmediğini bile göremezsiniz, çünkü hepsi modern web teknolojilerini kullanarak arka planda oluyor.
Ve farketmezsin. Hesabınızı arka planda sessizce siler, çünkü bu form,
'hesabınızı silin' formunu veya para formunu transfer eden, isteğin nereden geldiğini kontrol etmedi.
Köprü metni aktarım protokolü olan HTTP adında bir şey vardı.
Web'in temelleri, bunu durdurmak için tasarlanmış ve buna Yönlendirici başlığı denir.

English: 
and it means, that when you click a link or submit a form, it includes the things
it says Referer: this site.
So you know if the form  request is coming from the actual online bank, or the actual
delete your account form, and not some malicious site elsewhere.
The trouble is, if you start checking for that, a lot of users start complaining
because that Referer header isn't always sent like it should. Maybe you've got an adverb blocker
or maybe you've got some kind of privacy tool that's blocking that as well.
The way to get around that, is a one time key. What the Americans call a nonce, and which the British definitely do not call a nonce.
The one time key works, by the form on your website generating a unique code.
It can be anything, just a random string of characters, each time you create the form.
And then storing that [string of characters] and saying right, anything that comes back,
anything that I see, needs to have this token with it.

Turkish: 
ve bir bağlantıyı tıklattığınızda veya bir form gönderdiğinizde, şeyleri içerdiği anlamına gelir
Hakem diyor: bu site.
Dolayısıyla, form isteğinin gerçek çevrimiçi bankadan mı, yoksa gerçek bankadan mı geldiğini biliyorsunuzdur.
hesap formunuzu silin, başka bir sitedeki bazı zararlı siteleri değil.
Sorun şu ki, bunu kontrol etmeye başlarsanız, birçok kullanıcı şikayet etmeye başlar
Çünkü bu Yönerge başlığı her zaman olması gerektiği gibi gönderilmez. Belki bir zarf engelleyiciniz vardır.
ya da belki bunu engelleyen bir çeşit gizlilik aracınız da vardır.
Bunu aşmanın yolu, tek seferlik bir anahtardır. Amerikalıların neye benzediği, neyin İngiliz olduğu kesinlikle neyin neye benzediği değildir.
Bir defalık anahtar, web sitenizdeki formda benzersiz bir kod üreterek çalışır.
Her form oluşturduğunuzda herhangi bir şey olabilir, sadece rastgele bir karakter dizisi olabilir.
Ve sonra [karakter dizisini] saklamak ve doğru olanı söylemek, geri gelen her şeyi,
Gördüğüm herhangi bir şey, onunla bu belirteci olması gerekiyor.

English: 
and this code, this token you've generated is in the form as well.
Completely hidden, invisible to the user is something that says, token: random string of characters.
I think I just wrote a number plate. Uhm, this random string is meaningless, but what it represents
is that this form that I just made and I just sent out to the user, is the one that's coming back.
So meanwhile, on My (malicious) Awesome Blog, I don't know what this token is, I can't possibly know
what this token is, because it changes per user and it changes every time the form is requested, or at least
every few minutes. And if you copy that form, if you take that token and try and use it 5 minutes later or
10 minutes later or when the form has already been submitted, or for a different person, or for any one of these things
Then I'll look at that token and I'll go: that's wrong. I'm not having that (?) and suddenly,

Turkish: 
ve bu kod, oluşturduğunuz bu belirteç biçimindedir.
Tamamen gizli, kullanıcıya görünmeyen bir şey, belirteç: rastgele karakter dizesi.
Sanırım az önce bir plaka yazdım. Uhm, bu rastgele dize anlamsız, ancak neyi temsil ettiği
bu yeni yaptığım ve kullanıcıya gönderdiğim form, geri dönecek olan.
Bu arada, (kötü amaçlı) Harika Blogumda, bu jetonun ne olduğunu bilmiyorum, muhtemelen bilemiyorum.
Bu simge, kullanıcı başına değiştiği ve formun her istendiğinde veya en azından değiştiği için
birkaç dakikada bir. Ve eğer bu formu kopyalarsanız, o jetonu alırsanız ve 5 dakika sonra kullanmaya çalışırsanız veya
10 dakika sonra ya da form daha önce teslim edildiğinde ya da farklı bir kişi için ya da bunlardan herhangi biri için
O zaman ben tokene bakacağım ve gideceğim: bu yanlış. Bunu (?) Ve aniden yapmıyorum.

Turkish: 
Siteler Arası İstek Sahteciliği artık çalışmıyor. Ve hala teorik saldırılar ve şanslı akı var.
Bu bunu aşabilirdi ama genel olarak çözdü. Öyleyse kalıcı bir şey için web formları tasarlıyorsanız
Bir hesabı silmek, bir yorum yayınlamak, birisine yetki vermek ya da kullanmıyorsanız para aktarmak gibi bir şey,
bu oldukça büyük bir güvenlik açığıdır ve kullandığınız siteler bunu kullanmıyorsa ...
Artık bir yerde kötü amaçlı bir bloga gittiğinde ne olacağını biliyorsun.
Yani bu, Siteler Arası Sahtecilik Sahteciliği ve üçüncü saldırı ve herkes XSS'yi biliyor.
Bir web geliştiricisiyseniz, Siteler Arası Komut Dosyası Çalıştırma (XSS), bildiğiniz bir konudur.
SQL Injection, veritabanı saldırıları hakkında bildiğiniz bir şey, ama bu ...
Bu, uzun süredir radarın altına girdi ve hala bilmeyen birçok geliştirici var.
Öyleyse, bir site tasarlıyorsanız veya kalıcı bir şey olan bir siteyi kullanıyorsanız, bir göz atın.

English: 
Cross Site Request Forgery doesn't work anymore. And there're still theoretical attacks and lucky flux
that could get past this, but in general, that solves it. So if you're designing web forms for anything which is permanent
anything like deleting an account, posting a comment, authorizing someone, or even transferring money, if you're not using this,
this is a pretty big security hole, and if the sites you're using aren't using this, well...
you now know what might happen when you go to some malicious blog somewhere out there.
So that's Cross Site Request Forgery, and it is the third attack and everyone knows about XSS,
if you're a web developer, Cross Site Scripting (XSS) is the one you know about.
SQL injection, database attacks are the one you know about, but this...
This one went under the radar for a long time, and there's still a lot of developers that don't know about it.
So if you're designing a site, or using a site that has anything kind of permanent to it, have a look

Turkish: 
ve bir jetonun gönderilip gönderilmediğini kontrol edin. Çünkü eğer değilse, orada bir güvenlik deliği biraz olabilir.
Bir script etiketiyle başlarsınız ve sonra her şey durur, burada bir kapanış script etiketi var.
Bu bölümdeki hiçbir şey aslında kullanıcının ekranında görünmez ...
Şimdi diyelim ki "Tom" yazarak içinde bir alıntı işaretiyle ...

English: 
and see if a token is being sent. 'Cause if it isn't, might be a bit of a security hole there.
You start with a script tag and then everything stops,  you've got a closing script tag down here.
Nothing in this section will actually appear on the user's screen...
Now let's say I type in "Tom" with a quote mark in it...
