Ruby Sinatra Web Programlama #2

Bunjo

Uzman üye
14 Ara 2020
1,592
1,889
I Won

oqk18ir.png


lbn20fm.png
2q250vr.png



pDHFoUY.png


Merhaba ben saldırı timlerinden Bunjo, bu konuda "Sinatra" gemi ile web programlama serisine devam ediyoruz.



Sinatra

L3B4Yql.jpeg


Sinatra, Ruby programlama dilinde yazılmış hafif, basit ve esnek bir web uygulama çerçevesidir. Sinatra, minimal bir yapıya sahip olduğu için küçük ve orta ölçekli projelerde kullanımı kolaydır. Web uygulamalarını hızlı bir şekilde geliştirmek için tasarlanmıştır ve düşük öğrenme eğrisine sahiptir.

Sinatra Temel Özellikleri:

Hafif ve Basit: Sinatra, web uygulamaları oluşturmak için gereken minimum abstraksiyon ve karmaşıklığı sağlar. Bu sayede, kullanıcılar ihtiyaçlarına uygun özelleştirmeler yapabilirler.

DSL (Domain-Specific Language): Sinatra, birçok web uygulaması için yaygın olarak kullanılan işlemleri kolaylaştırmak için tasarlanmış özel bir dil (DSL) sunar. Bu, route'lar, middleware'ler ve diğer HTTP işlemleri için açık ve anlaşılır bir sözdizimi sağlar.

RESTful Yapı: Sinatra, RESTful (Representational State Transfer) tasarım prensiplerini destekler. Bu, HTTP protokolünü kullanarak kaynakları temsil etme ve yönetme konusunda kolaylık sağlar.

Yapılandırılabilirlik: Sinatra, kullanıcılara ihtiyaçlarına uygun olarak yapılandırma olanağı tanır.
Örneğin, kullanıcılar farklı view motorlarını (ERB, Haml gibi), session yönetimini veya port numarasını kolayca değiştirebilirler.

Entegrasyon: Sinatra, diğer Ruby kütüphaneleri ve framework'leri ile uyumlu çalışabilir. Bu, kullanıcıların ihtiyaçlarına uygun bir ekosistem oluşturmalarına olanak tanır.

Küçük Bir Topluluk ve Aktif Geliştirme: Sinatra, küçük ancak aktif bir topluluğa sahiptir. Bu, kullanıcıların sorularına hızlıca yanıt alabilmelerini ve geliştirme sürecini takip edebilmelerini sağlar.



Rails İle Sinatra Karşılaştırması

Özellik
Rails
Sinatra
Tip
Tam kapsamlı MVC çerçevesi
Hafif ve modüler mikro çerçeve
Kullanım Alanı
Orta ve Büyük Ölçekli Uygulamalar
Küçük ve Orta Ölçekli Projeler
Proje Yapısı
Kapsamlı ve Standart MVC yapısı
Yapılandırma Özgürlüğü, Standart bir yapı zorunlu değil
Veritabanı Entegrasyonu
Güçlü ORM (Active Record)
Veritabanı entegrasyonu mümkün, ancak kendi seçimlerinize bağlı
View Motoru
Genellikle ERB (Embedded Ruby)
Kullanıcı tercihine bağlı (ERB, Haml, vb.)
RESTful Tasarım
Doğal RESTful konvansiyonlar
RESTful tasarımın uygulanması gerekiyor
Routing
Raporlama için açık ve kapsamlı
Sadece temel route'lar, daha basit ve esnek
Middleware
Geniş middleware yelpazesi (Rack)
Özelleştirilebilir middleware'lerle daha basit
Otomatik Kod Üretimi
Scaffolding ve otomatik kod üretimi
Daha az otomatik kod üretimi, daha fazla özelleştirme
Community & Ecosystem
Geniş bir topluluk ve ekosistem
Küçük ancak aktif bir topluluk, daha sınırlı ekosistem
Öğrenme Eğrisi
Daha yüksek, daha karmaşık yapısı
Daha düşük, hızlı başlangıç ve öğrenme eğrisi


Middleware

Middleware, yazılım uygulamalarında, özellikle web uygulamalarında, gelen veya giden veri akışını işleyen ve değiştiren yazılım bileşenleridir. Middleware, bir uygulama veya sistem içindeki farklı katmanlar arasında veri transferini sağlayarak, uygulama içindeki çeşitli işlemleri kolaylaştırır.

Sinatra, Rack adı verilen bir ara yazılım (middleware) katmanını temel olarak kullanır. Rack, Ruby tabanlı web uygulamalarının sunucularla iletişim kurmasını sağlayan bir arabirim (interface) sunar. Rack middleware'leri, HTTP isteklerini alır, işler ve ardından HTTP yanıtlarını oluşturur. Bu middleware'ler, web uygulamanızın çeşitli aşamalarında özelleştirmeler veya düzenlemeler eklemenize olanak tanır.

Logger Middleware: HTTP istek ve yanıtlarını günlük dosyasına kaydeden bir middleware.

Session Middleware: Kullanıcı oturum bilgilerini yöneten bir middleware.

Static File Middleware: Statik dosyaların (CSS, JavaScript, resimler, vb.) sunucu tarafından doğrudan servis edilmesini sağlayan bir middleware.

Cors Middleware: Cross-Origin Resource Sharing (CORS) politikalarını yöneten bir middleware.




ERB Uzantıları Hakkında

".erb" uzantısı, "Embedded Ruby" anlamına gelir ve Ruby kodunu HTML veya başka bir belge türü içine yerleştirmenizi sağlayan bir şablon dosyasını belirtir. Bu dosyalar, içinde Ruby ifadelerini ve kodunu içeren, dinamik içerik üretmek için kullanılan şablonları temsil eder.

Sinatra ve Ruby on Rails gibi web uygulama çerçeveleri, genellikle .erb uzantılı şablon dosyalarını kullanarak HTML sayfalarını oluşturur. Bu sayede, dinamik içeriklerle birlikte statik HTML yapısını birleştirebilir ve kullanıcılara değişen verileri sunabilirsiniz.

Örnek:

Ruby:
<!DOCTYPE html>
<html>
<head>
  <title><%= @title %></title>
</head>
<body>
  <h1>Merhaba, <%= @user_name %>!</h1>
</body>
</html>


Sinatra Temel Yapısı

Sinatra ile alakalı temel bilgileri öğrendiğimize göre şimdi de temel yapısından bahsedelim.

Sinatra geminin yüklenmesi:

CoffeeScript:
gem install sinatra

FLxOv2K.png


HTTP isteklerini işleyecek olan "rackup" gemi

CoffeeScript:
gem install rackup


ulP0VUW.png


Şimdi sitemiz için bir proje klasörü oluşturalım, içerisine de

qdgjy6q.png


dosyalarını ekleyelim.

- main.rb -

Sinatra gemini içeriye aktaralım.

Ruby:
require 'sinatra'

Default olarak "4567" portu kullanılır bunu değiştirmek için:

Ruby:
set :port, 8080

:views ve : public_folder sembolleri sayfalar için klasörü ve topluluğa açık olarak paylaşılan klasörü temsil eder

Ruby:
set :views, File.join(File.dirname(__FILE__), 'source')
set :public_folder, File.join(File.dirname(__FILE__), 'public')

"/" dizini yani ana sayfaya istek atıldığı zaman açılacak sayfayı gösterir. Biz burada index.erb dosyasına yönlendiriyoruz.

Ruby:
get '/' do
  erb :index
end

- main.rb -

Ruby:
require 'sinatra'

set :port, 8080
set :views, File.join(File.dirname(__FILE__), 'source')
set :public_folder, File.join(File.dirname(__FILE__), 'public')

get '/' do
  erb :index
end

- /source/index.erb -

HTML:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Örnek Web Sitesi</title>
  <link rel="stylesheet" href="/public/css/styles.css">
</head>
<body>

<header>
  <h1>Örnek Web Sitesi</h1>
</header>

<nav>
  <a href="#">Anasayfa</a>
  <a href="#">Hakkımızda</a>
  <a href="#">Hizmetlerimiz</a>
  <a href="#">İletişim</a>
</nav>

<section>
  <article>
    <h2>Hoş Geldiniz</h2>
    <p>Merhaba! Bu örnek web sitesi basit bir HTML ve CSS kullanılarak oluşturulmuştur.</p>
  </article>

  <article>
    <h2>Hakkımızda</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
  </article>

  <article>
    <h2>Hizmetlerimiz</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
  </article>

  <article>
    <h2>İletişim</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
  </article>
</section>

<footer>
  &copy; 2024 Örnek Web Sitesi. Tüm hakları saklıdır.
</footer>

</body>
</html>

- /public/css/styles.css -

Ruby:
body {
    font-family: 'Arial', sans-serif;
    margin: 0;
    padding: 0;
    background-color: #f0f0f0;
}

header {
    background-color: #333;
    color: #fff;
    text-align: center;
    padding: 1em 0;
}

nav {
    background-color: #444;
    color: #fff;
    text-align: center;
    padding: 0.5em 0;
}

nav a {
    text-decoration: none;
    color: #fff;
    margin: 0 1em;
}

section {
    padding: 2em;
}

article {
    margin-bottom: 1.5em;
}

footer {
    background-color: #333;
    color: #fff;
    text-align: center;
    padding: 1em 0;
    position: fixed;
    bottom: 0;
    width: 100%;
}

Site:

http://localhost:8080/ adresine gittim.

gq95hkm.png


Terminale yansıyan trafik:

i5tb83m.png


Not: Eğer var olmayan bir sayfaya giderseniz Sinatra sizi böyle bir sayfayla karşılar:

m6ubb39.png


iyx2m8a.png




HTML ve CSS kodları internetten örnek olarak alınmıştır.

Yeni konularda session kontrollerini ve middleware ile çalışma konularını anlatacağım

Bu konu bu kadardı okuyan herkese teşekkür ederim.
 

ACE Veen

Uzman üye
4 Şub 2023
1,111
563
Belirsiz

oqk18ir.png


lbn20fm.png
2q250vr.png



pDHFoUY.png


Merhaba ben saldırı timlerinden Bunjo, bu konuda "Sinatra" gemi ile web programlama serisine devam ediyoruz.



Sinatra

L3B4Yql.jpeg


Sinatra, Ruby programlama dilinde yazılmış hafif, basit ve esnek bir web uygulama çerçevesidir. Sinatra, minimal bir yapıya sahip olduğu için küçük ve orta ölçekli projelerde kullanımı kolaydır. Web uygulamalarını hızlı bir şekilde geliştirmek için tasarlanmıştır ve düşük öğrenme eğrisine sahiptir.

Sinatra Temel Özellikleri:

Hafif ve Basit: Sinatra, web uygulamaları oluşturmak için gereken minimum abstraksiyon ve karmaşıklığı sağlar. Bu sayede, kullanıcılar ihtiyaçlarına uygun özelleştirmeler yapabilirler.

DSL (Domain-Specific Language): Sinatra, birçok web uygulaması için yaygın olarak kullanılan işlemleri kolaylaştırmak için tasarlanmış özel bir dil (DSL) sunar. Bu, route'lar, middleware'ler ve diğer HTTP işlemleri için açık ve anlaşılır bir sözdizimi sağlar.

RESTful Yapı: Sinatra, RESTful (Representational State Transfer) tasarım prensiplerini destekler. Bu, HTTP protokolünü kullanarak kaynakları temsil etme ve yönetme konusunda kolaylık sağlar.

Yapılandırılabilirlik: Sinatra, kullanıcılara ihtiyaçlarına uygun olarak yapılandırma olanağı tanır.
Örneğin, kullanıcılar farklı view motorlarını (ERB, Haml gibi), session yönetimini veya port numarasını kolayca değiştirebilirler.

Entegrasyon: Sinatra, diğer Ruby kütüphaneleri ve framework'leri ile uyumlu çalışabilir. Bu, kullanıcıların ihtiyaçlarına uygun bir ekosistem oluşturmalarına olanak tanır.

Küçük Bir Topluluk ve Aktif Geliştirme: Sinatra, küçük ancak aktif bir topluluğa sahiptir. Bu, kullanıcıların sorularına hızlıca yanıt alabilmelerini ve geliştirme sürecini takip edebilmelerini sağlar.



Rails İle Sinatra Karşılaştırması

Özellik
Rails
Sinatra
Tip
Tam kapsamlı MVC çerçevesi
Hafif ve modüler mikro çerçeve
Kullanım Alanı
Orta ve Büyük Ölçekli Uygulamalar
Küçük ve Orta Ölçekli Projeler
Proje Yapısı
Kapsamlı ve Standart MVC yapısı
Yapılandırma Özgürlüğü, Standart bir yapı zorunlu değil
Veritabanı Entegrasyonu
Güçlü ORM (Active Record)
Veritabanı entegrasyonu mümkün, ancak kendi seçimlerinize bağlı
View Motoru
Genellikle ERB (Embedded Ruby)
Kullanıcı tercihine bağlı (ERB, Haml, vb.)
RESTful Tasarım
Doğal RESTful konvansiyonlar
RESTful tasarımın uygulanması gerekiyor
Routing
Raporlama için açık ve kapsamlı
Sadece temel route'lar, daha basit ve esnek
Middleware
Geniş middleware yelpazesi (Rack)
Özelleştirilebilir middleware'lerle daha basit
Otomatik Kod Üretimi
Scaffolding ve otomatik kod üretimi
Daha az otomatik kod üretimi, daha fazla özelleştirme
Community & Ecosystem
Geniş bir topluluk ve ekosistem
Küçük ancak aktif bir topluluk, daha sınırlı ekosistem
Öğrenme Eğrisi
Daha yüksek, daha karmaşık yapısı
Daha düşük, hızlı başlangıç ve öğrenme eğrisi


Middleware

Middleware, yazılım uygulamalarında, özellikle web uygulamalarında, gelen veya giden veri akışını işleyen ve değiştiren yazılım bileşenleridir. Middleware, bir uygulama veya sistem içindeki farklı katmanlar arasında veri transferini sağlayarak, uygulama içindeki çeşitli işlemleri kolaylaştırır.

Sinatra, Rack adı verilen bir ara yazılım (middleware) katmanını temel olarak kullanır. Rack, Ruby tabanlı web uygulamalarının sunucularla iletişim kurmasını sağlayan bir arabirim (interface) sunar. Rack middleware'leri, HTTP isteklerini alır, işler ve ardından HTTP yanıtlarını oluşturur. Bu middleware'ler, web uygulamanızın çeşitli aşamalarında özelleştirmeler veya düzenlemeler eklemenize olanak tanır.

Logger Middleware: HTTP istek ve yanıtlarını günlük dosyasına kaydeden bir middleware.

Session Middleware: Kullanıcı oturum bilgilerini yöneten bir middleware.

Static File Middleware: Statik dosyaların (CSS, JavaScript, resimler, vb.) sunucu tarafından doğrudan servis edilmesini sağlayan bir middleware.

Cors Middleware: Cross-Origin Resource Sharing (CORS) politikalarını yöneten bir middleware.




ERB Uzantıları Hakkında

".erb" uzantısı, "Embedded Ruby" anlamına gelir ve Ruby kodunu HTML veya başka bir belge türü içine yerleştirmenizi sağlayan bir şablon dosyasını belirtir. Bu dosyalar, içinde Ruby ifadelerini ve kodunu içeren, dinamik içerik üretmek için kullanılan şablonları temsil eder.

Sinatra ve Ruby on Rails gibi web uygulama çerçeveleri, genellikle .erb uzantılı şablon dosyalarını kullanarak HTML sayfalarını oluşturur. Bu sayede, dinamik içeriklerle birlikte statik HTML yapısını birleştirebilir ve kullanıcılara değişen verileri sunabilirsiniz.

Örnek:

Ruby:
<!DOCTYPE html>
<html>
<head>
  <title><%= @title %></title>
</head>
<body>
  <h1>Merhaba, <%= @user_name %>!</h1>
</body>
</html>


Sinatra Temel Yapısı

Sinatra ile alakalı temel bilgileri öğrendiğimize göre şimdi de temel yapısından bahsedelim.

Sinatra geminin yüklenmesi:

CoffeeScript:
gem install sinatra

FLxOv2K.png


HTTP isteklerini işleyecek olan "rackup" gemi

CoffeeScript:
gem install rackup


ulP0VUW.png


Şimdi sitemiz için bir proje klasörü oluşturalım, içerisine de

qdgjy6q.png


dosyalarını ekleyelim.

- main.rb -

Sinatra gemini içeriye aktaralım.

Ruby:
require 'sinatra'

Default olarak "4567" portu kullanılır bunu değiştirmek için:

Ruby:
set :port, 8080

:views ve : public_folder sembolleri sayfalar için klasörü ve topluluğa açık olarak paylaşılan klasörü temsil eder

Ruby:
set :views, File.join(File.dirname(__FILE__), 'source')
set :public_folder, File.join(File.dirname(__FILE__), 'public')

"/" dizini yani ana sayfaya istek atıldığı zaman açılacak sayfayı gösterir. Biz burada index.erb dosyasına yönlendiriyoruz.

Ruby:
get '/' do
  erb :index
end

- main.rb -

Ruby:
require 'sinatra'

set :port, 8080
set :views, File.join(File.dirname(__FILE__), 'source')
set :public_folder, File.join(File.dirname(__FILE__), 'public')

get '/' do
  erb :index
end

- /source/index.erb -

HTML:
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Örnek Web Sitesi</title>
  <link rel="stylesheet" href="/public/css/styles.css">
</head>
<body>

<header>
  <h1>Örnek Web Sitesi</h1>
</header>

<nav>
  <a href="#">Anasayfa</a>
  <a href="#">Hakkımızda</a>
  <a href="#">Hizmetlerimiz</a>
  <a href="#">İletişim</a>
</nav>

<section>
  <article>
    <h2>Hoş Geldiniz</h2>
    <p>Merhaba! Bu örnek web sitesi basit bir HTML ve CSS kullanılarak oluşturulmuştur.</p>
  </article>

  <article>
    <h2>Hakkımızda</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
  </article>

  <article>
    <h2>Hizmetlerimiz</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
  </article>

  <article>
    <h2>İletişim</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi.</p>
  </article>
</section>

<footer>
  &copy; 2024 Örnek Web Sitesi. Tüm hakları saklıdır.
</footer>

</body>
</html>

- /public/css/styles.css -

Ruby:
body {
    font-family: 'Arial', sans-serif;
    margin: 0;
    padding: 0;
    background-color: #f0f0f0;
}

header {
    background-color: #333;
    color: #fff;
    text-align: center;
    padding: 1em 0;
}

nav {
    background-color: #444;
    color: #fff;
    text-align: center;
    padding: 0.5em 0;
}

nav a {
    text-decoration: none;
    color: #fff;
    margin: 0 1em;
}

section {
    padding: 2em;
}

article {
    margin-bottom: 1.5em;
}

footer {
    background-color: #333;
    color: #fff;
    text-align: center;
    padding: 1em 0;
    position: fixed;
    bottom: 0;
    width: 100%;
}

Site:

http://localhost:8080/ adresine gittim.

gq95hkm.png


Terminale yansıyan trafik:

i5tb83m.png


Not: Eğer var olmayan bir sayfaya giderseniz Sinatra sizi böyle bir sayfayla karşılar:

m6ubb39.png


iyx2m8a.png




HTML ve CSS kodları internetten örnek olarak alınmıştır.

Yeni konularda session kontrollerini ve middleware ile çalışma konularını anlatacağım

Bu konu bu kadardı okuyan herkese teşekkür ederim.
Elinize sağlık hocam
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.