Uzman Cevap beta aşamasından çıkmaya hazırlanıyor! Yenilikleri takipte kalın.
Çözüldü! Bu soru aradığı cevabı buldu :) Teşekkürler iyi niyetli insanlar!

Node JS'de yazilmis kod nasil gizlenir.

Herkese merhaba,

Local'de ya da online hostumda node js dosyamin linkini direk olarak tarayiciya yazdigimda (Or: http://www.domain-name.com/server.js) PHP mantiginda oldugu gibi kod gizlenmiyor. normal bir JS doyasi halinde ekranda goruntulenebiliyor. Uglify-Minify yapilmasinin bir faydasi oldugunu dusunmuyorum. Sonucta tum veri tabani bilgilerim (kullanici adi, sifre vb.) acikca ortada ve resmen kotu niyetli insanlari iceri buyur ediyor. :)

Node JS yaygin bir sekilde kullanilan bir backend platformu. Bunu engellemenin, kodu gizlemenin mutlaka bir yolu yordami vardir diye tahmin ediyorum. Ancak halen net bir bilgiye ulasabilmis degilim.

Bu konuda beni bilgilendirebilirseniz sevinirim.
Cevaplar (9)
0
Bu adrese bi bakar mısın hocam. Oradaki cevaplar belki işine yarayabilir. Doğru cevapta dosya uzantısını jse şeklinde kaydedip kullandığı diğer js dosyalarında içeri aktarıyor. Bir nebzede olsa işe yarar diye tahmin ediyorum. Ayrıca .htaccess ile parametreli güvenlik yapabilirsin. request.js?token=3452453545 şeklinde.
0
Cevap icin tesekkurler oncelikle..

Bu konuyla ilgili neredeyse tum stackoverflow postlarini ve ayrica makaleleri taradim saniyorum. Farkli farkli yontemler sunuluyor ama hani adina "Best Practise" dedigimiz uygulanmasi gereken en dogru cozumu ariyorum. Senin de dedigin gibi en mantikli cozum saniyorum htaccess yoluyla birseyler yapmak. Yoksa boyle bir guvenlik acigi bu kadar yogun kullanilan bir gelistirme ortaminda kabul edilemez... :)
0
Aynen öyle hocam, token metodunu yazdığım sistemlerde kullandım ve hiç problem yaşamadım. Tavsiye ederim. Bu sunucu konfigürasyon dosyalarının özelleştirilebilmesi bir velinimet bizim için. İyi çalışmalar.
0
Şimdi şöyle yapalım. Kullanıcının erişebileceği dosyaları public diye bir klasöre atarsın yani o kişi oraya erişebilir. express modülünü kullanarak bu işlemi yapabilirsin.
var express = require('express');
var app = express();
var path = require('path');

// app.use(express.static(__dirname)); // Kullanıcılar bu klasöre yönlenir (bu istenmeyen durum)
app.use(express.static(path.join(__dirname, 'public'))); //  "public" ise ilk sayfanın görüneceği yer 

app.listen(80);
console.log('Dinlenen port 80');


Bunu yaptığın durumda senin anasayfanda (/) bulunan dosyalara artık erişimi kapatmış olursun.
yani kullanıcılar server.js göremez onun yerine public (/public) dosyasında bulunanları aktarmış olursun. ama server.js çalışır. bir dizin geri alma gibi düşünebilirsin.
bkz
0
Farklı yorum ve görüşler için teşekkürler arkadaşlar. Bu günlerde sürekli bu konuyu araştırıyorum. Bir çok kişi ve kuruma da mailler attım. Gelecek cevapları (Tabi gelirse, çoğu zaman gelmiyor) buradan yine paylaşacağım. Eğer burada sunulan çözümlerden biriyle karşılaşırsam da doğru cevap olarak işaretleyeceğim..

Farklı arkadaşlar, farklı çözümler sunmaktan geri durmasınlar. Bilgi paylaştıkça büyür!...
0
Merhabalar.

Node.js bir server-side dil/platform. Yani Node.js'te yazacağınız tüm kodlar, scriptler sunucu tarafında çalışacaktır ve bunları da yayınlamamalısınız. Tıpkı PHP gibi.

Yani dosyaların uzantısının .js olması veya yazdığınız kodun javascript olması sizi yanıltmasın.

Çözüme gelince; PHP üzerinden karşılaştırmalı örnek vereyim. PHP bir siteyi yayınlamak için siz sitenizdeki .php uzantılı uygulama dosyalarını web sunucunuza yüklüyorsunuz. Daha sonra da apache/nginx gibi bir web sunucusuyla uygulamanızı yayınlıyorsunuz. Sitenize bir ziyaretçi girdiğinde bu web sunucunuz ilgili klasördeki ilgili .php dosyalarını çalıştırması için PHP komutunu çağırıyor. PHP komutu da dosyanızdaki <?php ve ?> tagları arasındaki kodları işliyor, kalan kodları ise işlemeden sonuçta bir HTML üretiyor ve bu HTML'i ziyaretçinin tarayıcısına gönderiyor.

Bu yüzden sizin <?php ve ?> tagları arasına yazdığınız, veritabanı bağlantı bilgileri gibi bilgileri ziyaretçi göremiyor. Çünkü bir .php uzantılı dosya çağırdığınızda PHP komutu bu aradaki değerleri işleyerek ziyaretçiye göstermiyor.

Node.js'te ise durum biraz daha farklı. Node.js ile yazdığınız uygulamanızı yine Node.js ile oluşturduğunuz bir sunucu vasıtasıyla yayınlıyorsunuz (tabi dilerseniz önüne bir proxy koyabilirsiniz). Yalnız buradaki fark, PHP'de olduğu gibi uygulamanızın tüm dosyalarınının bulunduğu klasörü yayınlamıyorsunuz. Onun yerine, uygulamanızın giriş noktası olan sunucu kodlarına tüm istekleri gönderiyorsunuz. Tüm istekler örneğin uygulamamızın giriş noktası olan server.js dosyasına geliyor. Daha sonra bu dosyadaki kodlar da istemciye nasıl bir cevap dönüleceğini (resim, favicon, css gibi statik bir dosyanın servis edilmesi, bir HTML render edilmesi veya JSON ile bir API cevabı döndürülmesi gibi) kararlaştırıp öyle bir cevap döndürür.

Örneğin

// server.js
var express = require('express')
var http = require('http')

var app = express()

// Stillerin bulundugu klasoru yayinlamak icin
app.use('/assets/css', express.static('public/static/css')

// Bir API isteği cevaplamak için
app.post('/login', function (request, response) {
  var db = require('./db')
  db.Users.find({
    email: request.body.email,
    password: request.body.password
}, function (user) {
  return response.end(JSON.stringify(user)
})

// Bir HTML sayfasi render etmek icin
app.get('/login', function (request, response) {
  return response.render('./views/login.html')
})

var server = http.createServer(app)
server.listen(process.env.PORT || 8080)


Bu örnekteki uygulamızı çalıştırmak için

node server.js

diyoruz (veya istersek PM2, forever.js gibi bir pm kullanıyoruz). Yani server.js dosyasını node.js prosesine veriyoruz. Ziyaretçiye göndermiyoruz. Örneğimizde ziyaretçinin sitemize 8080 portundan yapacağı tüm istekleri server.js dosyası karşılamakta ve ziyaretçinin ulaşmak istediği adrese göre de dosya sistmeindeki bir dosyayı servis etmekte (assets), bir JSON döndürmekte (api) veya bir HTML hazırlayıp döndürmekte (GET:/login).
0
Yasin bey, oncelikle zaman ayirip, ilgilendiginiz ve iki satir degil, detayli bir cevap verdiginiz icin cok tesekkur ederim.

Cevabinizi birkac kez okudum ve kacirdigim bir yer olmamasina ozen gosterdim. Yazdiklarinizdan anladigim kadariyla node.js kodlarini guvenlik altina almak icin uygulanacak yollardan biri nodejs ile olusturdugumuz serverin onune bir proxy eklemek.

Ancak yine yazdiklarinizdan yola cikarak internette tekrar arastirmaya basladim ve aklima farkli bir yontem geldi.. Ancak bundan once ben size yasadigim sorunu ornek klasor yapisi ile tarif etmek istiyorum.

apache server icindeki bir domaini ornek alalim.


/* 
/var/www/.../.../.../domain-name.com
*/


"domain-name.com" dizinini root olarak kabul edersek, bu dizinin altinda


/* 
/api/server.js
/js/scripts.js
/css/styles.css
/index.html
*/


oldugunu varsayalim. Ayni dizinin altina /API/SERVER.JS seklinde nodejs dosyalarini koydugumuz zaman ve www.domain-name.com/api/server.js olarak adres cubuguna girdigimizde haliyle tum web serverlar bu dosyayi goruntuleyecektir. Ancak tum nodejs dosyalarini root dizinine degilde serverda herhangi bir klasorde tuttugumuzda bu dosyalara direk olarak erisim otomatik olarak engellemis, sadece belirledigimiz port uzerinden yapilan taleplere karsilik verecek sekilde duzenleyebiliriz. Ancak bu durumda hazirladigimiz api'ye


/* 
http://www.domain-name.com:{{port}}/login
http://www.domain-name.com:{{port}}/logout
http://www.domain-name.com:{{port}}/getTasks
*/


seklinde nasil ulasabiliriz, orasi da baska bir soru isareti...
0
Merhabalar,
Node.js uygulamalarını yayınlamak için içindeki dosyaları bir klasöre atıp web server (apache vs) kurmuyorsunuz.
Bunun yerine Node.js ile web serverın kendisini oluşturuyorsunuz (yukarıdaki örnekteki http.createServer() ve server.listen() kısımları). Oluşturduğunuz sunucu, sunucunun dinlediği port a(yukarıdaki örnekte 8080) gelen tüm istekleri kendisi karşılıyor. Yani dosyaları host etme durumu yok, ziyaretçinin o dosyaları (sizin örneğinizdeki server.js) çağırıp çalıştırma imkanı yok.

Onun yerine ziyaretçiden (client) gelen tüm istekleri (request) sizin sunucunuz (server.js) karşılıyor. Hangi URL de (örneğin /login, /logout) ne yapacağını o belirliyor.

İstediğiniz örnek için


var http = require('http')

var app = function (request, response) {
  var head = '<html><head></head><body><h1>Test App</h1>'
  var content = ''
  var bottom = '</body></html>'

  if (request.url === '/login') {
    content = 'login page'
  } else if (request.url === '/logout') {
    content = 'logout page'
  } else {
    content = '404 not found'
  }

  response.end(head + content + bottom)
}

var server = http.createServer(app)

server.listen(8080, function (err) {
  if (err) console.error(err)
  console.log('server ready on 8081')
})
0
Soylediklerinizden anladigim kadariyla benim hatam Rest API dosyalarini (server.js vs.) host edilen bir klasore koymus olmam.. Oradan cikardigim zaman zaten sorun otomatikmen ortadan kalkmis olacak ve dosyalara erisim engellenmis olacak.

Cok tesekkur ederim Yasin bey ve diger ilgili arkadaslar. Umarim bu konuda hata yapan ya da sorun yasayan baska arkadaslara da bir kaynak saglayabilmisizdir.
Cevap Yazın..

[code=css,php,sql,asp..]..kod..[/code] , [url=http:...com] , [img=resim linki]
[color=renk kodu]..yazı..[/color]

yabancı dizi izle tv ünitesi