Cross-site scripting/tr

Siteler arası betik oluşturma, XSS veya rastgele JavaScript enjeksiyonu, web uygulamalarında genellikle saldırganların enjekte etmesini sağlayan bir tür bilgisayar güvenlik açığıdır istemci tarafı betik diğer kullanıcılar tarafından görüntülenen Web sayfalardır.

İstemci tarafında siteler arası komut dosyası oluşturma ve nasıl önleneceği hakkında bilgi için DOM-based XSS sayfasına bakın.

Örnekler
Siteler arası betik oluşturma örnekleri:


 * Saldırgan, kimliği doğrulanmış bir kullanıcıyı, özel hazırlanmış bir URL'yi veya denetledikleri bir web sitesini, onları hazırlanmış URL'ye yönlendirebilecek bir web sitesini ziyaret etmeye yönlendirir.
 * URL, web uygulamanızı gösterir ve sorgu dizesine JavaScript ekler. Web uygulaması, zayıf çıkış nedeniyle, rastgele JavaScript'i kullanıcıya gösterilen sayfaya enjekte eder.
 * JavaScript, kullanıcının çerezlerine tam erişim ile çalışır. Sayfayı herhangi bir şekilde değiştirebilir ve kullanıcı adına form gönderebilir. Riskler, özellikle mağdur özel ayrıcalıklara sahip bir yönetici ise şiddetlidir.

Daha fazla örnek için Vikipedi'de istismar örnekleri sayfasına bakın.

Örnek:

Saldırgan, kurbanı aşağıdaki gibi bir URL'ye gönderir:

POST istekleri, site dışında JavaScript kullanarak da savunmasızdır.

Mağdurların etkilenecek sayfayı doğrudan ziyaret etmeleri bile gerekmez. Kötü amaçlı 3. taraf web siteleri, bir web sitesini ziyaret ederken bir kullanıcıya saldırmak için gizli iframe'leri hazırlanmış URL'lere yerleştirebilir. Ayrıca, kısa URL hizmetleri kullanarak veya URL'yi başka bir URL gibi gizleyerek kötü amaçlı veya hazırlanmış bir URL'yi ziyaret etmek için kandırılabilirler.

Siteler arası betiğini durdurma
To avoid Cross-site scripting do the following:


 * Validate your input
 * Escape your output

You can skip validation, but you can never skip escaping. Escape everything.

It does not matter if the escaping is redundant with the validation, the performance cost is a small price to pay in exchange for a demonstrably secure web app. It does not matter if the input comes from a trusted source, escaping is necessary even then, because escaping gives you correctness as well as security.

Escape as close to the output as possible, so that the reviewer can easily verify that it was done. It helps you to verify your own code as well.

Output encoding (escaping) is context sensitive. So be aware of the intended output context and encode appropriately (e.g. HTML entity, URL, JavaScript, etc.)

The OWASP Abridged XSS Prevention Cheat Sheet is a useful and up to date quick reference guide for mitigating XSS issues.

All this is true of any text-based interchange format. We concentrate on HTML because web apps tend to generate a lot of it, and because the security issues are particularly severe. Every text format should have a well-studied escaping function.

Here are some convenience functions which do HTML escaping for your site.

MediaWiki escape output
MediaWiki also has some elegant built-in interfaces which implicitly escape your output. For SQL using the 'key' => 'value' syntax of conditions implicitly escapes values. And the Html:: and Xml:: interface methods escape attributes, and depending on the method used may escape a text value as well.