Said | Kampüs Kod https://www.kampuskod.com Kampüs Bilim Sanat Teknoloji ve Yazılım Eğitimleri Platformu Fri, 03 Dec 2021 13:18:49 +0000 tr hourly 1 https://wordpress.org/?v=6.2.2 Mikroservis Mimarisi Nedir? Monolitik Mimari Nedir? Microservice vs Monolithic https://www.kampuskod.com/yazilim/mikroservis-mimarisi-nedir-monolitik-mimari-nedir-microservice-vs-monolithic/ https://www.kampuskod.com/yazilim/mikroservis-mimarisi-nedir-monolitik-mimari-nedir-microservice-vs-monolithic/#respond Fri, 03 Dec 2021 13:14:43 +0000 https://www.kampuskod.com/?p=11369 Mikroservis – mikroservis mimarisi olarakta bilinir – aşağıdaki hizmetlerle uygulama yapısında bir mimari stilidir. Yüksek oranda bakım yapılabilir ve test edilebilir (Highly maintainable and testable) Uygulamalar arası bağlılık düşük (Loosely coupled) Bağımsız deployment (Independently deployable) Yaptığı işlere göre organize edilir (Organized around business capabilities) Küçük ekipler tarafından sahiplenebilir (Owned by a small team) Mikroservis mimarisi, […]

The post Mikroservis Mimarisi Nedir? Monolitik Mimari Nedir? Microservice vs Monolithic first appeared on Kampüs Kod.]]>
Mikroservis – mikroservis mimarisi olarakta bilinir – aşağıdaki hizmetlerle uygulama yapısında bir mimari stilidir.

  • Yüksek oranda bakım yapılabilir ve test edilebilir (Highly maintainable and testable)
  • Uygulamalar arası bağlılık düşük (Loosely coupled)
  • Bağımsız deployment (Independently deployable)
  • Yaptığı işlere göre organize edilir (Organized around business capabilities)
  • Küçük ekipler tarafından sahiplenebilir (Owned by a small team)

Mikroservis mimarisi, hızlı, sık ve güvenilir teslimatlar, karmaşık uygulamalar sağlar. Ayrıca, teknoloji yapınızın gelişmesini sağlar. Yani farklı teknolojileri kullanma imkanı verir.

Şimdiyse monolitik ve mikroservis mimarisinin detaylarına bakalım.

Server-side bir kurumsal uygulama geliştiriyorsunuz. Uygulamanız masaüstü tarayıcılar, mobil tarayıcılar ve native mobil uygulamalar olmak üzere çok çeşitli farklı clientları desteklemeli. Uygulamanız 3. parti uygulamaların tüketmesi için API’lere sahip olabilir. Web servisler veya bir mesaj broker (RabbitMQ, Kafka vb.) aracılığıyla diğer uygulamalarla entegrasyonu olabilir. Uygulama, business mantığını kullanarak istekleri (HTTP istekleri ve mesajları) işler; bir veritabanına erişir; diğer sistemlerle mesaj alışverişi yapar ve bir HTML/JSON/XML yanıtı döndürür. Uygulamanın farklı işlevsel alanlarına karşılık gelen mantıksal bileşenler vardır.

Uygulamanın nasıl deploy edileceği problemlerden biridir. Ve aşağıdaki maddeler kapsayan bir sistem istiyorsunuz:

  • Uygulama üzerinde çalışan geliştiriciler takımına sahipsiniz
  • Yeni ekip üyeleri hızlı bir şekilde üretken olmasını istiyorsunuz
  • Uygulamanın anlaşılması ve değiştirilmesinin kolay olmasını istiyorsunuz
  • Uygulamanın sürekli dağıtımını yapmak istiyorsunuz
  • Ölçeklenebilirlik ve kullanılabilirlik gereksinimlerini karşılamak için uygulamanın birden çok örneğini birden çok makinede çalıştırmak istiyorsunuz
  • Gelişmekte olan teknolojilerden (framework, programlama dilleri vb.) yararlanmak istiyorsunuz.

Müşterilerden sipariş alan, stok kontrolu yapan, ödemeyi doğrulayan ve kargolama gerçekleştiren bir e-ticaret uygulaması oluşturduğunuzu düşünelim. Uygulama, kullanıcı arayüzünü uygulayan StoreFrontUI ve ödeme kontrolü, stok takibi ve sevkiyat siparişlerinin bakımı için bazı backend hizmetleri dahil olmak üzere çeşitli bileşenlerden oluşur.

Şimdi gelin yukarıdaki uygulamayı ve problemi Monolitik Mimari ve Mikroservis mimarisi açısından inceleyelim.

Monolitik Mimari Nedir?

Monolitik Mimari Nedir?
Monolitik Mimari Nedir?

Monolithic mimari yazılımın self-contained (kendi kendine yeten) olarak tasarlanması anlamına gelmektedir. Bir standart doğrultusunda “tek bir parça” olarak oluşması da diyebiliriz. Bu mimarideki component’ler loosely coupled olmasından ziyade, birbirine bağlı olarak tasarlanmaktadır.

Uygulama, tek bir monolitik uygulama olarak deploy edilir. Örneğin, bir Java web uygulaması, Tomcat gibi bir web kapsayıcısında çalışan tek bir WAR dosyasından oluşur. Kullanılabilirliği ölçeklendirmek ve iyileştirmek için uygulamanın birden çok örneğini bir load balancer arkasında çalıştırabilirsiniz.

Monolitik Mimari kullanıldığında uygulama ilk etapta aşağıdaki faydaları sağlar:

Monolitik Mimari Avantajları

  • Geliştirme yapmak kolaydır – Mevcut geliştirme araçlarının ve IDE’lerin amacı, monolitik uygulamaların geliştirilmesini desteklemektir.
  • Deploy etmek kolaydır – WAR dosyasını (veya dizin hiyerarşisini) uygun çalışma zamanında dağıtmanız yeterlidir.
  • Scale etmek kolaydır – Uygulamanın birden çok kopyasını bir yük dengeleyicinin arkasında çalıştırarak uygulamayı ölçeklendirebilirsiniz.

Ancak, uygulama büyüdükçe ve ekip büyüdükçe, bu yaklaşımın giderek daha önemli hale gelen bir dizi dezavantajı vardır:

Monolitik Mimari Dezavantajları

  • Ekibinize yeni katılan birisinin projeyi anlaması ve üzerinde değişiklik yapması zor bir hale gelir. Bunun sonucunda geliştirme hızı yavaşlar. Ayrıca, projedeki modüler yapı zamanla bozulabilir çünkü bir sınır bulunmamaktadır. Ek olarak, bir değişikliğin nasıl doğru bir şekilde uygulanacağını anlamak zor olabileceğinden, kodun kalitesi zamanla düşer.
  • Aşırı yüklenmiş IDE – Uygulama zamanla büyüyeceği için kullandığınız IDE’lerin uygulamayı çalıştırma performansı düşecektir. Bu yüzden developerların üretkenliği azalacaktır.
  • Aşırı yüklenmiş Web Container – Uygulama ne kadar büyükse, başlatılması o kadar uzun sürer. Container’in başlamasını beklerken boşa harcanan zaman nedeniyle developer üretkenliği üzerinde büyük bir etkisi olur. Ayrıca deployment bu durumdan etkilenir.
  • Sürekli deployment sürecinin zorlaşması – Büyük bir monolitik uygulama da sık deploymentlar için bir engeldir. Bir bileşeni güncellemek için tüm uygulamayı yeniden deploy etmenizi gerektirir. Bu, değişiklikten etkilenip etkilenmediklerine bakılmaksızın arka plan görevlerini (örneğin bir Java uygulamasındaki Quartz işleri) kesintiye uğratır ve muhtemelen sorunlara neden olur. Ayrıca güncellenmemiş bileşenlerin doğru şekilde başlamama olasılığı da vardır. Sonuç olarak, yeniden deployment ilişkili risk artar ve bu da sık güncellemeleri engeller.
  • Uygulamayı ölçeklendirmek zorlaşır – Monolitik bir mimari, yalnızca bir boyutta ölçeklenebilir. Uygulamanın daha fazla kopyasını çalıştırarak artan işlem hacmiyle ölçeklenebilir. Hatta bazı cloud servisler, kopya sayısını yüke göre dinamik olarak ayarlayabilir. Ancak öte yandan, bu mimari artan bir veri hacmiyle ölçeklenemez. Uygulama örneğinin her kopyası tüm verilere erişecek, bu da önbelleğe almayı daha az etkili hale getirir ve bellek tüketimini ve Giriş/Çıkış trafiğini artırır. Ayrıca, farklı uygulama bileşenlerinin farklı kaynak gereksinimleri vardır, biri yoğun CPU’luyken diğeri yoğun bellekli olabilir. Monolitik bir mimariyle her bileşeni bağımsız olarak ölçekleyemeyiz.
  • Ölçeklendirirek geliştirmeyi engeller – Monolitik bir uygulama aynı zamanda ölçeklendirerek geliştirmenin önündeki bir engeldir. Uygulama belirli bir boyuta ulaştığında, mühendislik ekiplerini belirli işlevsel alanlara odaklanan ekiplere bölmek yararlıdır. Örneğin, UI ekibine, ödeme ekibine, stok ekibine vb. sahip olmak isteyebiliriz. Monolitik bir uygulamanın sorunu, ekiplerin bağımsız çalışmasını engellemesidir. Ekipler, geliştirme çabalarını ve deploymentlerı koordine etmelidir. Bir ekibin değişiklik yapması ve ürünü güncellemesi çok daha zordur.
  • Bir teknolojiye uzun vadede bağlılık gerektirir – Monolitik bir mimari, geliştirmenin başlangıcında seçtiğiniz teknoloji çevresiyle (ve bazı durumlarda bu teknolojinin belirli bir sürümüyle) evli olmaya zorlar 🙂 Monolitik bir uygulama ile daha yeni bir teknolojiyi aşamalı olarak benimsemek zor olabilir. Örneğin, JVM’yi seçtiğinizi düşünelim. Java’nın yanı sıra Groovy ve Scala gibi Java ile güzel bir şekilde birlikte çalışan diğer JVM dillerini kullanabileceğiniz için bazı dil seçenekleriniz var. Ancak JVM olmayan dillerde yazılan bileşenlerin monolitik mimarinizde yeri yoktur. Ayrıca, uygulamanız daha sonra geçersiz hale gelen bir framework kullanıyorsa, uygulamayı aşamalı olarak daha yeni ve daha iyi bir çerçeveye taşımak zor olabilir. Daha yeni bir platform çerçevesi benimsemek için, riskli bir girişim olan tüm uygulamayı yeniden yazmanız gerekebilir.

Monolitik mimariyi analiz ettik, şimdiyse gelin mikroservis mimarisine bakalım.

Mikroservis Mimarisi Nedir?

Mikroservis Mimarisi Nedir?
Mikroservis Mimarisi Nedir?

Mikroservis mimarisi kavramını yazımızının başında tanımlamıştık. Tekrar özetlemek gerekirse, mikroservis mimarisi birbirinden bağımsız olarak çalışan ve birbirleriyle haberleşen bireysel servislerdir. Her servis kendisine ait olan iş mantığını yürütür ve diğer servislerin iş mantığı ile ilgilenmez.

Mikroservis Mimarisi kullanıldığında uygulama aşağıdaki faydaları sağlar:

Mikroservis Mimarisi Avantajları

  • Büyük, karmaşık uygulamaların sürekli teslimini ve dağıtımını (continuous delivery and deployment) sağlar:
    • Kolay bakım yapılabilir – Her servis oldukça küçüktür bu yüzden kolayca anlaşılabilir ve değişiklik yapılabilir.
    • Daha iyi test edilebilir – Servisler küçüktür ve hızlı test edilebilir.
    • Daha iyi deployment – Servisler bağımsız olarak deploy edilebilir.
    • Daha iyi takım yönetimi – Her takım bir veya birden fazla küçük servis ile ilgilenir.
    • Her takım diğer takımlardan bağımsız olarak kendi testlerini gerçekleştirebilir, ürünü güncelleyebilir ve servisini ölçeklendirebilir.
  • Her mikroservis oldukça küçüktür.
    • Developerlar tarafından kolayca anlaşılabilir.
    • IDE kullanımı hızlıdır bu yüzden developerlar daha üretken olurlar.
    • Uygulama hızlıca çalıştığından dolayı, geliştiriciler üretken olur ve deployment hızlanır.
  • Hata durumları izoledir. Örneğin bir serviste bellek yetersizliği varsa sadece o servis etkilenir, diğer servisler çalışmaya devam eder. Ancak monolitik mimaride hatalı çalışan bir sistem tüm sistemi çökertebilir.
  • Bir teknolojiye uzun vadede bağlılık gerektirmez. Yeni bir servis geliştirirken farklı bir teknoloji kullanabilirsiniz. Benzer şekilde, mevcut bir hizmette büyük değişiklikler yaparken, onu yeni bir teknoloji yığını kullanarak yeniden yazabilirsiniz çünkü değişiklik yapmak kolaydır.

Mikroservis Mimarisi Dezavantajları

  • Developerlar, dağıtık sistemin karmaşıklığıyla uğraşabilirler:
    • Servisler arası iletişim kurulmalıdır ve fail durumları başak çıkabilmelidir.
    • Birden çok servisi kapsayan istekleri uygulamak daha zordur.
    • Servisler arasındaki etkileşimleri test etmek daha zordur.
    • Birden çok servisi kapsayan istekleri uygulamak, ekipler arasında dikkatli bir koordinasyon gerektirir.
    • Developer araçları/IDE’ler monolitik yapılar için geliştirilmiştir, dağıtık uygulamalar geliştirmek için destekleri yoktur.
  • Deployment karmaşıklığı olabilir. Production’da, birçok farklı servisten oluşan bir sistemi devreye almanın ve yönetmenin operasyonel karmaşıklığı da vardır.
  • Bellek tüketimi artabilir.

Son olarak mikroservis mimarilerinde veri tutarlılığı (data consistency) en önemli konulardan biridir. Diğer bir yandan mikroservis mimarisini ne zaman kullanmalıyız da aklımıza gelen sorulardan biridir. Gelecek yazılarda bunlardan bahsediyor olacağım.

Kaynaklar

https://microservices.io/

https://smartbear.com/solutions/microservices/

The post Mikroservis Mimarisi Nedir? Monolitik Mimari Nedir? Microservice vs Monolithic first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/mikroservis-mimarisi-nedir-monolitik-mimari-nedir-microservice-vs-monolithic/feed/ 0
Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması https://www.kampuskod.com/yazilim/java/keycloak-kullanarak-guvenli-java-spring-boot-rest-api-uygulamasi/ https://www.kampuskod.com/yazilim/java/keycloak-kullanarak-guvenli-java-spring-boot-rest-api-uygulamasi/#comments Mon, 11 Oct 2021 12:45:24 +0000 https://www.kampuskod.com/?p=11330 Herkese merhabalar, bu yazımızda Keycloak’u Docker üzerinde kurup, Spring Boot-Keycloak entegrasyonunu yapıp, oluşturduğumuz REST API üzerinde url isteği yaparak Keycloak login sayfasından giriş yapıp kullanıcı bilgilerine erişiyor olacağız. İlk olarak Keycloak Nedir diyerek başlayalım. Keycloak Nedir? Keycloak, açık kaynaklı bir kimlik ve erişim yönetimi çözümüdür. Daha fazla bilgi için keycloak web sitesini ziyaret edebilirsiniz. Keycloak […]

The post Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması first appeared on Kampüs Kod.]]>
Herkese merhabalar, bu yazımızda Keycloak’u Docker üzerinde kurup, Spring Boot-Keycloak entegrasyonunu yapıp, oluşturduğumuz REST API üzerinde url isteği yaparak Keycloak login sayfasından giriş yapıp kullanıcı bilgilerine erişiyor olacağız. İlk olarak Keycloak Nedir diyerek başlayalım.

Keycloak Nedir?

Keycloak, açık kaynaklı bir kimlik ve erişim yönetimi çözümüdür. Daha fazla bilgi için keycloak web sitesini ziyaret edebilirsiniz.

Keycloak Docker kurulumu

Terminali açın ve aşağıdaki komutu çalıştırın.

docker run -p 8085:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2

Keycloak Konfigürasyonu

1- Keycloak admin paneline http://localhost:8085/ adresinden erişiniz. Administration console tıklayarak admin olarak giriş yapınız.

Keycloak Ayarları
Keycloak Ayarları

2- demo isminde yeni bir realm oluşturun.

Keycloak Ayarları
Keycloak Ayarları

 

3- Şimdiyse demo-app isminde yeni bir client oluşturacağız. Access type olarak public, Valid Redirect URI olarakta * veriniz. Ve ayarları kaydediniz.

Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları

4- Kullanıcı oluşturalım.

Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları
Keycloak Ayarları

Keycloak ayarlarımızı tamamladık. Şimdiyse Spring Boot projesi kısmına geçelim.

Spring Boot Projesi Oluşturalım

1- IntelliJ IDEA üzerinden New Project diyerek açılan pencereden Spring Initializr tabını seçelim ve projemizi SpringBootKeycloak şeklinde isimlendirelim.

IntelliJ IDEA Spring Initializr Keycloak
IntelliJ IDEA Spring Initializr Keycloak

2- Spring Web ve Spring Security bağımlılıklarını projemize dahil edelim.

IntelliJ IDEA Spring Initializr Keycloak
IntelliJ IDEA Spring Initializr Keycloak

3- Pom.xml’e aşağıdaki kodları ekleyelim.

<dependencies>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
        <version>15.0.2</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bom</groupId>
            <artifactId>keycloak-adapter-bom</artifactId>
            <version>15.0.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Pom.xml’in son hali aşağıdaki gibi olmalıdır:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>SpringBootKeycloak</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBootKeycloak</name>
    <description>SpringBootKeycloak</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
            <version>15.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.keycloak.bom</groupId>
                <artifactId>keycloak-adapter-bom</artifactId>
                <version>15.0.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

5- Son olarak application.properties dosyasına aşağıdaki parametreleri ekleyelim.

keycloak.auth-server-url=http://localhost:8085/auth
keycloak.realm=demo
keycloak.resource=demo-app
keycloak.public-client=true

keycloak.auth-server-url -> Keycloak url adresi

keycloak.realm -> Oluşturduğumuz Realm adı

keycloak.resource -> Oluşturduğumuz client ID

keycloak.public-client -> Oluşturduğumuz client Public olduğu için bunu true olarak belirledik. Bu kısım client’ın access type alanına göre değiştirilebilir. Biz demo uygulama yaptığımız için şimdilik public.

6- GloabalSecurityConfiguration adında bir sınıf oluşturalım ve KeycloakWebSecurityConfigurerAdapter sınıfını extend edelim.

package com.example.springbootkeycloak;

import org.keycloak.adapters.KeycloakConfigResolver;
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;

@EnableWebSecurity
public class GloabalSecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter {

    @Bean
    @Override
    protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
        return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
    }

    @Bean
    public KeycloakConfigResolver KeycloakConfigResolver() {
        return new KeycloakSpringBootConfigResolver();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .anyRequest().authenticated();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
        keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
        auth.authenticationProvider(keycloakAuthenticationProvider);
    }
}

 

7- Son olarak REST endpointi tanımlayalım. hello adresine bir istek gittiğinde kullanıcı login sayfasına yönlenecek ve logout sayfasına gidildiğinde oluşturulan oturum silinecek ve tekrardan login sayfasına yönlenmiş olacak. getName() metodu ile kullanıcı giriş yaptıktan sonra ismini ekrana basmış olduk.

package com.example.springbootkeycloak;

import org.keycloak.KeycloakPrincipal;
import org.keycloak.KeycloakSecurityContext;
import org.keycloak.representations.AccessToken;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@RestController
public class HelloController {


    @GetMapping("/hello")
    public ResponseEntity<String> hello(Authentication authentication){

        if (authentication.getPrincipal() instanceof KeycloakPrincipal) {
            KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) authentication.getPrincipal();
            AccessToken token = kp.getKeycloakSecurityContext().getToken();
            final String body = "Hi,  " + token.getName();
            return ResponseEntity.ok(body);
        }
        return new ResponseEntity<>("Unauthorized", HttpStatus.UNAUTHORIZED);
    }

    @GetMapping(path = "/logout")
    public void logout(HttpServletRequest request, HttpServletResponse httpServletResponse) throws ServletException {
        request.logout();
        httpServletResponse.setHeader("Location", "/hello");
        httpServletResponse.setStatus(302);
    }
}

 

Tüm aşamaları tamamlamış olduk. Şimdiyse test edelim.

Uygulama Testi

Spring projemizi run edelim ve http://localhost:8080/hello/ adresine istek atalım. Karşımıza login sayfası gelecek. Oluşturduğumuz kullanıcı ile login olalım. Giriş yaptıktan sonra http://localhost:8080/logout adresine giderek çıkış yapabilirsiniz.

Keycloak Spring Boot Login
Keycloak Spring Boot Login
Keycloak Spring Boot Login
Keycloak Spring Boot Login
Postman üzerinden de test edebilirsiniz:

http://localhost:8085/auth/realms/demo/protocol/openid-connect/token adresine istek atarken body kısmından x-www-form-urlencoded seçerek client_id, grant_type, username, password alanları gönderiniz.

Keycloak Spring Boot Postman Test
Keycloak Spring Boot Postman Test

Üretilen access_token JWT token olarak üretilmiştir. https://jwt.io/ adresine bu access token’ı yapıştırarak token içerisindeki bilgilere erişebilirsiniz.

Keycloak Spring Boot JWT.IO Data Test
Keycloak Spring Boot JWT.IO Data Test

 

 

The post Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/keycloak-kullanarak-guvenli-java-spring-boot-rest-api-uygulamasi/feed/ 1
Java İmmutable ve Mutable Nedir? – Java Dersleri https://www.kampuskod.com/yazilim/java/java-immutable-ve-mutable-nedir-java-dersleri/ https://www.kampuskod.com/yazilim/java/java-immutable-ve-mutable-nedir-java-dersleri/#respond Thu, 07 Oct 2021 07:56:01 +0000 https://www.kampuskod.com/?p=11303 Immutable (değişmez) sınıflar, nesneleri bir kez oluşturulduktan sonra nesne içeriği değiştirilemeyen sınıflardır. Aslında sabit sınıflar olarakta isimlendirebiliriz. Nesneyi oluştururken içerisinde bulunacak olan değerleri verirseniz ve sonrasında bu değerleri değiştiremezsiniz. Eğer bir immutable nesnenin state’ini değiştirmek isterseniz vermek istediğiniz state’i taşıyacak olan yeni bir nesne oluşturmak zorundasınız. Boolean, Short, Integer, Long, Float, Double, Char ve String […]

The post Java İmmutable ve Mutable Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
Immutable (değişmez) sınıflar, nesneleri bir kez oluşturulduktan sonra nesne içeriği değiştirilemeyen sınıflardır. Aslında sabit sınıflar olarakta isimlendirebiliriz. Nesneyi oluştururken içerisinde bulunacak olan değerleri verirseniz ve sonrasında bu değerleri değiştiremezsiniz. Eğer bir immutable nesnenin state’ini değiştirmek isterseniz vermek istediğiniz state’i taşıyacak olan yeni bir nesne oluşturmak zorundasınız. Boolean, Short, Integer, Long, Float, Double, Char ve String gibi tüm kapsayıcı sınıflar (Wrapper Class) java’da immutable sınıflara örnek olarak gösterilebilir. Tam tersi olarak, değiştirilebilen sınıflar da Mutable (değişebilir) sınıflardır.

Peki neden immutable sınıflara ihtiyacımız var?

Sorumuzun cevabunı hemen verelim 🙂 Bir sınıfı thread-safe yapmak istiyorsanız immutable yapmanız gerekmektedir. Immutable nesnelerin değerleri değişmeyeceği için üzerinde ne kadar thread çalışırsa çalışsın hep aynı değerler üzerinden işlem yapılacaktır. Bu noktada ortaya çıkan bir dezavantajlık söz konusuda var tabii. Immutable nesnelerin dezavantajı ise, değerin değişmesini istiyorsak yeni bir nesne oluşturmamız gerekiyor. Bu da zaman, bellek ve garbage collector maliyetleri oluşturmaktadır.

Java’da immutable sınıf nasıl oluşturulur?

  • Sınıfı, final anahtarı ile işaretleyin, böylece extend (kalıtım) edemezsiniz.
  • Sınıfın tüm alanlarını private yapın, böylece doğrudan erişime izin vermezsiniz.
  • Değişkenler için setter metodu koymayın.
  • Tüm değiştirilebilen alanları final yapın, böylece yalnızca bir kez atanabilir.
  • Tüm alanlara, constructor aracılığıyla ilk değerlerini atayın.
  • Değiştirebilir olan tüm alanların dışarıya nesnelerin klonlanarak dönmesini gerçekleştirin.

Örnek bir Immutable Sınıf yapısı aşağıdaki gibidir:

public final class ImmutablePerson {

    private final String name;

    public ImmutablePerson(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

The post Java İmmutable ve Mutable Nedir? – Java Dersleri first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/java/java-immutable-ve-mutable-nedir-java-dersleri/feed/ 0
PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme https://www.kampuskod.com/yazilim/phpstorm-docker-ayarlari-phpstorm-docker-aktiflestirme/ https://www.kampuskod.com/yazilim/phpstorm-docker-ayarlari-phpstorm-docker-aktiflestirme/#respond Sat, 06 Mar 2021 13:44:16 +0000 https://www.kampuskod.com/?p=11126 Merhabalar bu yazımızda Windows işletim sistemi üzerinde kurduğumuz Docker ve PhpStorm bağlantı ayarlarını yapacağız. Böylece PhpStorm üzerinden Docker Imagelarınıza ve Containerlarına erişebileceksiniz. Docker Windows kurulumu için: https://docs.docker.com/docker-for-windows/install/ PhpStorm Windows kurulumu için: https://www.jetbrains.com/phpstorm/download/ Yukarıdakileri kurduktan sonra PhpStorm’u açalım. New Project alanından “wordpress-docker” isimli proje oluşturalım. Bu projeyi ilerleyen süreçte WordPress-MySQL-PhpMyadmin ‘i docker üzerinde çalıştırırken de kullanacağız. […]

The post PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme first appeared on Kampüs Kod.]]>
Merhabalar bu yazımızda Windows işletim sistemi üzerinde kurduğumuz Docker ve PhpStorm bağlantı ayarlarını yapacağız. Böylece PhpStorm üzerinden Docker Imagelarınıza ve Containerlarına erişebileceksiniz.

Docker Windows kurulumu için: https://docs.docker.com/docker-for-windows/install/

PhpStorm Windows kurulumu için: https://www.jetbrains.com/phpstorm/download/

Yukarıdakileri kurduktan sonra PhpStorm’u açalım. New Project alanından “wordpress-docker” isimli proje oluşturalım. Bu projeyi ilerleyen süreçte WordPress-MySQL-PhpMyadmin ‘i docker üzerinde çalıştırırken de kullanacağız.

PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme

PhpStorm’da Docker Aktifleştirme

  • Ctrl+Alt+S tuşlarına basarak Settings/Preferences penceresini açın. Açılan pencerede sol üst arama çubuğuna Docker yazalım. Build, Execution, Deployment altındaki Docker sekmesine tıklayalım.
PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme
  • + ‘ya basarak Docker Yapılandırması ekleyeceğiz, böylece Docker Daemon’a bağlanacağız. Windows üzerinde Docker kurulumu yaptığım için “Docker for Windows” seçeneğini seçiyoruz. Zaten otomatik seçili geliyor. Alt bölümde Connection successful yazısını görmeniz gerekiyor. Apply ve Ok deyip pencereyi kapatalım.
PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme
  • PhpStorm otomatik olarak alt bar alanında Services (View | Tool Windows | Services) diye bir alan ekleyecek. Eğer bu alan açılmazsa Alt+8 basarak açabilirsiniz.
PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme

Son olarak sol taraftaki Connect ( ▶ ) butonuna basarak Docker’a bağlanın. Imagelarınızı ve Containerlarınızı görebilirsiniz.

PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme

The post PhpStorm Docker Ayarları – PhpStorm Docker Aktifleştirme first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/phpstorm-docker-ayarlari-phpstorm-docker-aktiflestirme/feed/ 0
Woocommerce Ödeme Yöntemi Güncelleme – Woocommerce Payment Method Update Türkçe https://www.kampuskod.com/yazilim/woocommerce-odeme-yontemi-guncelleme-woocommerce-payment-method-update-turkce/ https://www.kampuskod.com/yazilim/woocommerce-odeme-yontemi-guncelleme-woocommerce-payment-method-update-turkce/#respond Thu, 11 Feb 2021 14:24:03 +0000 https://www.kampuskod.com/?p=10886 Woocommerce’de bazı durumlara göre ödeme yönteminin adını güncellemek isteyebilirsiniz. Örneğin; siparişin para birimi farklı olduğu bir durumda farklı bir ödeme yöntemine yönlendirme yapıyorsanız. Aşağıdaki basit kod ile Woocommerce’de ödeme yönteminizi sipariş özelinde güncelleyebilirsiniz. update_post_meta( $order_id, ‘_payment_method_title’, ‘Ödeme Yöntemi Adınız’ ); Sadece “Ödeme Yöntemi Adınız” yazan yeri değiştirerek bu kodu kullanabilirsiniz.

The post Woocommerce Ödeme Yöntemi Güncelleme – Woocommerce Payment Method Update Türkçe first appeared on Kampüs Kod.]]>
Woocommerce’de bazı durumlara göre ödeme yönteminin adını güncellemek isteyebilirsiniz. Örneğin; siparişin para birimi farklı olduğu bir durumda farklı bir ödeme yöntemine yönlendirme yapıyorsanız. Aşağıdaki basit kod ile Woocommerce’de ödeme yönteminizi sipariş özelinde güncelleyebilirsiniz.

update_post_meta( $order_id, ‘_payment_method_title’, ‘Ödeme Yöntemi Adınız’ );

Sadece “Ödeme Yöntemi Adınız” yazan yeri değiştirerek bu kodu kullanabilirsiniz.

The post Woocommerce Ödeme Yöntemi Güncelleme – Woocommerce Payment Method Update Türkçe first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/woocommerce-odeme-yontemi-guncelleme-woocommerce-payment-method-update-turkce/feed/ 0
WordPress jQuery nasıl eklenir? Worpdress jQuery Ekleme https://www.kampuskod.com/yazilim/wordpress-jquery-nasil-eklenir-worpdress-jquery-ekleme/ https://www.kampuskod.com/yazilim/wordpress-jquery-nasil-eklenir-worpdress-jquery-ekleme/#respond Wed, 27 Jan 2021 18:38:08 +0000 https://www.kampuskod.com/?p=10714 WordPress’e jQuery eklemek çok kolay. Peki, Worpdress’e jQuery nasıl eklenir? Bu yazımızda WordPress jQuery eklemeyi öğreneceksiniz. WordPress sitesinize jQuery eklemeyi aşağıdaki şekilde yapabilirsiniz: Aşağıdaki kodu kopyalayın. WordPress admin panele giriş yapıp, sol menüden Görünüm->Tema Editör’ü tıklayın. Açılan sayfada en sağda Tema dosyaları bölümünde functions.php’yi seçin. Orta panelde açılan functions.php’nin kod kısmının en aşağısına yukarıda kopyaladığınız […]

The post WordPress jQuery nasıl eklenir? Worpdress jQuery Ekleme first appeared on Kampüs Kod.]]>
WordPress’e jQuery eklemek çok kolay. Peki, Worpdress’e jQuery nasıl eklenir? Bu yazımızda WordPress jQuery eklemeyi öğreneceksiniz. WordPress sitesinize jQuery eklemeyi aşağıdaki şekilde yapabilirsiniz:

Aşağıdaki kodu kopyalayın.

wp_register_script( 'jQuery', 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js', null, null, true );
wp_enqueue_script('jQuery');
  • WordPress admin panele giriş yapıp, sol menüden Görünüm->Tema Editör’ü tıklayın.
  • Açılan sayfada en sağda Tema dosyaları bölümünde functions.php’yi seçin.
  • Orta panelde açılan functions.php’nin kod kısmının en aşağısına yukarıda kopyaladığınız WordPress jQuery kodunu yapıştırın.
  • Daha sonra kaydet butonuna basın ve ayarları kaydetin.
WordPress jQuery nasıl eklenir? Worpdress jQuery Ekleme
Wordpress jQuery nasıl eklenir? Worpdress jQuery Ekleme
WordPress jQuery nasıl eklenir? Worpdress jQuery Ekleme

WordPress sitenize jQuery eklemek işte bu kadar basit. WordPress’e jQuery ekleme kısmında anlamadığınız bir yer var ise yorum yapmayı unutmayın. WordPress’e jQuery nasıl ekleneceğini böylece öğrendik. Keyifli Kodlamalar 🙂

The post WordPress jQuery nasıl eklenir? Worpdress jQuery Ekleme first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/wordpress-jquery-nasil-eklenir-worpdress-jquery-ekleme/feed/ 0
World writeable directory nedir? Linux world writable files nedir? https://www.kampuskod.com/yazilim/world-writeable-directory-nedir-linux-world-writable-files-nedir/ https://www.kampuskod.com/yazilim/world-writeable-directory-nedir-linux-world-writable-files-nedir/#comments Fri, 22 Jan 2021 20:43:58 +0000 https://www.kampuskod.com/?p=10623 Linux işletim sistemlerinde, tüm herkesin erişip, yazabileceği dosyaya “world writable” dosya denir. World writeable dosyaları kullanarak saldırgan kişiler linux işletim sisteminde dosyalara komutlar yazabilir. Bu yüzden world writeable dosyalar çok tehlikelidir. istanbul escort ataeşehir escort kadıköy escort pendik escort WordPress world writeable directory nedir? WordPress sitelerinizin bulunduğu linux sunucusunda virüs taraması yaptığınızda yüklü olan bir […]

The post World writeable directory nedir? Linux world writable files nedir? first appeared on Kampüs Kod.]]>
Linux işletim sistemlerinde, tüm herkesin erişip, yazabileceği dosyaya “world writable” dosya denir. World writeable dosyaları kullanarak saldırgan kişiler linux işletim sisteminde dosyalara komutlar yazabilir. Bu yüzden world writeable dosyalar çok tehlikelidir.

WordPress world writeable directory nedir?

WordPress sitelerinizin bulunduğu linux sunucusunda virüs taraması yaptığınızda yüklü olan bir plugin’e world writeable directory kısmında rastlarsanız, o plugini kullanmayı derhal bırakmalısınız. Çünkü bu plugin’e dışarıdan bir kod yazılarak, sitenizde virüs çalıştırılabilir.

The post World writeable directory nedir? Linux world writable files nedir? first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/world-writeable-directory-nedir-linux-world-writable-files-nedir/feed/ 1
PHP Güvenlik Açıkları – PHP Güvenliği için Yöntemler – PHP Güvenlik Açıklarını Kapatmak https://www.kampuskod.com/yazilim/php/php-guvenlik-aciklari-php-guvenligi-icin-yontemler-php-guvenlik-aciklarini-kapatmak/ https://www.kampuskod.com/yazilim/php/php-guvenlik-aciklari-php-guvenligi-icin-yontemler-php-guvenlik-aciklarini-kapatmak/#respond Mon, 28 Dec 2020 21:01:19 +0000 https://www.kampuskod.com/?p=9678 Web uygulamaları her türlü sahte saldırıdan korumak, bir web geliştiricisi için en önemli durumdur. Web uygulamaları hiçbir güvenlik sorunu veya güvenlik açığı bırakmayacak kadar güvenlikli bir şekilde geliştirilmeli. Herhangi bir kötü niyetli saldırı olasılığını ortadan kaldırmalısınız. PHP Güvenliği İçin En İyi Yöntemler Düzenli olarak PHP versiyonunuzu güncelleyin En son yayınlanan PHP versiyonu 8.0’dır. PHP versiyonunuzu […]

The post PHP Güvenlik Açıkları – PHP Güvenliği için Yöntemler – PHP Güvenlik Açıklarını Kapatmak first appeared on Kampüs Kod.]]>
Web uygulamaları her türlü sahte saldırıdan korumak, bir web geliştiricisi için en önemli durumdur. Web uygulamaları hiçbir güvenlik sorunu veya güvenlik açığı bırakmayacak kadar güvenlikli bir şekilde geliştirilmeli. Herhangi bir kötü niyetli saldırı olasılığını ortadan kaldırmalısınız.

PHP Güvenliği İçin En İyi Yöntemler

Düzenli olarak PHP versiyonunuzu güncelleyin

En son yayınlanan PHP versiyonu 8.0’dır. PHP versiyonunuzu mutlaka en son sürümde tutmalısınız. PHP geliştiricileri her yeni versiyonda, bir önceki versiyondaki olan güvenlik açıklarını kapatmak ve yeni özellikler geliştirmek için kod yazarlar. En güncel PHP versiyonunu https://www.php.net/supported-versions.php adresinden kontrol edebilirsiniz. Bu adreste PHP versiyonlarının hangi tarihe kadar güvenlik desteği alabileceğini görebilirsiniz.

Cross-site Scripting (XSS) kaçının

Cross site scripting yani siteler arası komut dosyası çalıştırma, web sitenin koduna veya çıktısına harici bir komut dosyasının yerleştirildiği bir tür kötü amaçlı web saldırısıdır. Cross-Site Scripting (XSS), yazılımcının kullanıcıdan aldığı girdileri gerekli HTML ve JavaScript filtrelerinden geçirmediği takdirde oluşan bir zafiyettir. Girdiler gerekli filtrelerden geçmediği taktirde, eğer kullanıcı aynı zamanda bir saldırgan ise; diğer kullanıcılara veya doğrudan sisteme zarar verebilecek zararlı kodları çalıştırabilir. HTML, CSS ve JavaScript tarayıcı tarafından yorumlanan diller olduğundan dolayı, yazılan zararlı kod doğrudan diğer kullanıcıları da etkileyebiliyor. 3 tipi vardır:

  1. Reflected XSS
  2. DOM-Based XSS
  3. Stored XSS

SQL Injections Ataklarından Korunun

PHP programlama dilinde en yaygın atak türlerinden biri SQL injection’dur. Tek bir sorgu tüm uygulamayı tehlikeye atabilir. SQL injection saldırılarında saldırganlar sorgular üzerinden verilerinizi değiştirmeye çalışabilir veya verilenizin tümüne erişebilir. Uygulamanızda bir kullanıcı verisini çekmek için doğrudan SQL kodunda kullanıcında alınan girdiyi kullandığınızı varsayalım. SQL kodunuz aşağıdaki gibi olduğunu kabul edelim:

$sql = "SELECT * FROM users WHERE username = '" . $username . "';

İşte buradaki $username değişkeni tüm veritabanını silmek de dahil olmak üzere veritabanına zarar verebilecek sql komutları içerebilir. Peki sql injections atakları nasıl önlenir?

PHP’de SQL Injections Atakları Nasıl Önlenir?

PHP’de PDO yapısını kullanarak bu tarz ataklardan kurtulabilirsiniz. PDO güvenli SQL sorguları yazmanıza imkan verecektir. PDO ile input’a girilen özel karakter sorguyu değiştiremez.

Aşağıdaki kod bloğunda SQL koduna injection yapılabilir.

1.	$sql = "SELECT username, email FROM users WHERE id = ".$id." ;
2.	
3.	foreach ($dbh->query($sql) as $row) {
4.	
5.	printf ("%s (%s)\n", $row['username'], $row['email']);

Burada PHP PDO yapısını kullanırsak kodumuz şu şekilde olmalıdır:

1.	$sql = "SELECT username, email FROM users WHERE id = :id";
2.	
3.	$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
4.	
5.	$sth->execute([':id' => $id]);
6.	
7.	$users = $sth->fetchAll();

PHP’de Siteler Arası İstek Sahteciliği XSRF/CSRF

Türkçe açılımı “Siteler Arası İstek Sahtekârlığı” şeklinde olan CSRF zafiyeti; web uygulamasını kullanmakta olan kullanıcıların istekleri dışında işlemler yürütülmesidir. Uygulamaya giden isteklerin hangi kaynaktan ve nasıl gönderildiği kontrol edilmeyen sistemlerde ortaya çıkan bu zafiyet, aslında uygulamayı kodlayan yazılımcıların gözünden kaçan bir ayrıntıdır diyebiliriz. Genelde CSRF veya XSRF şeklinde kısaltılan bu güvenlik açığı “Session Riding” olarak da bilinmektedir. CSRF, istek verilerini okuyamaz ve çoğunlukla HTML etiketlerinde herhangi bir bağlantı veya değiştirilmiş veri göndererek durum değiştirme isteğini hedefler.

Bu durumu daha iyi anlayabilmek için örnek bir senaryo üzerinde inceleyelim:

Kurban, tarayıcısının bir sekmesinde banka hesabında oturum açmış halde işlemlerini yaparken, bir diğer sekmesinde ise e-posta hesabında gelen kutusunu incelemektedir.

Bu esnada kullanmış olduğu banka uygulamasında dışarıdan gelen veya dışarıya giden istekler engellenmemiştir.

Saldırgan bu durumu fark ettikten sonra, banka uygulamasında bulunan para gönderme formundaki html form elemanlarını, parayı kendine gönderecek şekilde, kendi oluşturmuş olduğu html sayfasına yazıp bu banka uygulamasına gönderim yapmasını sağlar.

Saldırgan, hazırlamış olduğu html sayfasını kullanıcıya e-posta yoluyla gönderdikten sonra, kullanıcı yan sekmesinde bulunan gelen kutusunu incelemeye koyulur.

Kullanıcı ilgili e-postada bulunan html sayfasına gittiği takdirde, saldırgan ilgili havale işleminde gönderilmiş olan parayı kendine yönlendirmiş olacaktır.

XSRF/CSRF saldırısını token kullanarak çözebilirsiniz. Sitenizde formlarda aşağıdaki gibi bir token yapısı kullanıp, bu token’ı kullanıcı için kontrol ederek ataklardan korunabilirsiniz.

  <input type=”hidden” name=”token” value=”R6B7hoBQd0wfG5Y6qOXHPNm4b9WKsTq6Vy6Jssxb”/>



PHP’de Oturum Ele Geçirme (Session Hijacking)

İki bilgisayar arasındaki geçerli TCP iletimini ele geçirme saldırısıdır. Çoğu doğrulama (authentication) TCP oturumu başlangıcında olduğundan bu, saldırganın makineye erişmesini sağlar. Saldırganlar kurulmuş TCP oturumlarındaki tüm trafiğini dinleyip kimlik, bilgi hırsızlığı, dolandırıcılığı vb. yaparlar.

Session hijacking, kurbanların cookie veya session bilgilerini bir şekilde elde ederek bu cookie veya session bilgisinin saldırganın tarayıcısına enjekte edilmesi sonucu, kurbanın hesabına giriş yapabilmesi olayıdır.

Session Hijacking önlemek için oturumları her zaman IP adresine bağlamalısınız.

1.	$IP = getenv ( "REMOTE_ADDR" );

Gelen kullanıcı istekleri farklı bir ip adresi üzerinden geliyorsa, hızlı bir şekilde tüm oturumları sonladırmalı, session bilgisini ve çerezleri silmelisiniz.

Çerezli silmenin en güvenli yolu aşağıdaki gibidir:

1.	setcookie ($name, "", 1);
2.	
3.	setcookie ($name, false);
4.	
5.	unset($_COOKIE[$name]);

1. satır çerezin süresinin dolmasını sağlar. 3. Satırda cookiye false ataması yapılır. 5. Satırda ise bu cookie tamamen ortadan kaldırılır, yok edilir.

PHP’de Güvenli Dosya Yükleme Kullanın

Dosya yükleme, herhangi bir kullanıcı veri işleme uygulamasının gerekli bir parçasıdır. Ancak bazı noktalarda, makalede daha önce açıkladığımız gibi dosyalar XSS saldırıları için de kullanıldığını unutmayın. Temel bilgilere dönersek, her zaman formdaki POST isteğini kullanın ve <form> etiketinde enctype = “multipart / form-data” özelliğini bildirin. Daha sonra dosya türünü finfo sınıfını kullanarak şu şekilde doğrulayın:

1.	$finfo = new finfo(FILEINFO_MIME_TYPE);
2.	$fileContents = file_get_contents($_FILES['some_name']['tmp_name']);

Uygulamaların güvenliğini güçlendirmek için dosya boyutu, dosya yeniden adlandırma ve yüklenen dosyaları özel konumda saklama gibi birkaç başka doğrulama da gereklidir.

HTTPS İçin SSL Sertifikası Kullanın

Google Chrome, Opera, Firefox ve diğerleri gibi tüm modern tarayıcılar, web uygulamaları için HTTPS protokolünü kullanmanızı önerir. HTTPs, güvenilmeyen siteler için güvenli ve şifreli bir erişim kanalı sağlar. Web sitenize SSL sertifikası yükleyerek HTTPS’yi eklemelisiniz. Ayrıca web uygulamalarınızı XSS saldırılarına karşı güçlendirir ve bilgisayar korsanlarının kod kullanarak taşınan verileri okumasını engeller.

PHP Uygulamaları Bulutta Çalıştırın

Her türlü web sitesi ve uygulama için hızlı, güvenli ve güvenlidirler. Web uygulamaları için oldukça zararlı olan DDOS, Brute force ve phishing saldırılarını önlemek için her zaman güvenli bir katman sağlarlar. DigitalOcean, Linode, AWS gibi bulut yapılarını kullanabilirsiniz.

Kullanıcı Girdileri Her Zaman Doğrulayın

Kullanıcının girdiği verileri istediğiniz formata uygun olup olmadığını kontrol etmelisiniz. Genellikle geliştiriciler, doğum tarihi veya telefon numarası gibi veri biçimlerini doğrulamak için düzenli ifadeler (regex) kullanır. Burada en önemli şey, sizin istediğiniz formata olan uygunluğunu kontrol etmektir.

Dizin Erişimini Sınırlandırın

Open_basedir işlevi, PHP’nin dosya sisteminizde erişebileceği dosyaları sınırlamanıza izin verir. Open_basedir işlevini projenizin köküne ayarlarsanız, bu, yalnızca projenizin kök dizinindeki ve aşağıya doğru dosyalara erişebileceği anlamına gelir.

Kötü niyetli bir kullanıcının PHP aracılığıyla sunucunuza erişmesi ve / etc / passwd gibi hassas dosyalara erişmeye çalışması durumunda, open_basedir işlevi bunu önleyecektir.

URL Kodlama Kullanın

PHP, geliştiricilere güvenli bir şekilde geçerli URL’ler oluşturmaları için urlencode işlevi verir. PHP belgelerine göre, işlev bir URL’nin sorgu bölümünde kullanılacak bir dizeyi kodlarken kullanışlıdır.

Kullanıcı girdisinin bir URL oluşturmak için kullanıldığını hayal edin. Bu durumda, güvenli bir URL oluşturmak için urlencode işlevini kullanabilirsiniz.

<?php echo '<a href="mylink?user=', urlencode($userID), '">';?>

The post PHP Güvenlik Açıkları – PHP Güvenliği için Yöntemler – PHP Güvenlik Açıklarını Kapatmak first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/php/php-guvenlik-aciklari-php-guvenligi-icin-yontemler-php-guvenlik-aciklarini-kapatmak/feed/ 0
PHP versiyonu öğrenme – PHP’de versiyon nasıl öğrenilir? PHP sürümü öğrenme https://www.kampuskod.com/yazilim/php/php-versiyonu-ogrenme-phpde-versiyon-nasil-ogrenilir-php-surumu-ogrenme/ https://www.kampuskod.com/yazilim/php/php-versiyonu-ogrenme-phpde-versiyon-nasil-ogrenilir-php-surumu-ogrenme/#comments Sun, 13 Dec 2020 21:44:20 +0000 https://www.kampuskod.com/?p=8806 Uzak sunucu üzerinde veya local sunucunuz üzerinde çalışan PHP uygulamanızdaki PHP versiyonunu öğrenmek çok kolay. Peki PHP versiyonunuzu nasıl öğrenebilirsiniz? İşte bu yazımda size PHP sürümünüzü diğer adıyla PHP versiyonunuzu nasıl öğreneceğinizi anlatacağım. Herhangi bir text editörünü açalım. Ben Sublime text kullanıyorum. Kampüs Kod yazarlarımızdan @cihankoc41 ‘da sublime text kullanıyor. Aşağıda onun anlatımıyla sublime text’in […]

The post PHP versiyonu öğrenme – PHP’de versiyon nasıl öğrenilir? PHP sürümü öğrenme first appeared on Kampüs Kod.]]>
Uzak sunucu üzerinde veya local sunucunuz üzerinde çalışan PHP uygulamanızdaki PHP versiyonunu öğrenmek çok kolay. Peki PHP versiyonunuzu nasıl öğrenebilirsiniz? İşte bu yazımda size PHP sürümünüzü diğer adıyla PHP versiyonunuzu nasıl öğreneceğinizi anlatacağım.

Herhangi bir text editörünü açalım. Ben Sublime text kullanıyorum. Kampüs Kod yazarlarımızdan @cihankoc41 ‘da sublime text kullanıyor. Aşağıda onun anlatımıyla sublime text’in nasıl kullanacağınızı görebilirsiniz.

PHP versiyon öğrenme adımları – PHP sürümü öğrenme

XAMPP PHP Versiyon Öğrenme

1- Text editörünüzü veya not defterinizi açın. Aşağıdaki kodu boş belgenizin içine yapıştırın.

<?php phpinfo();  ?> 

2- Belgenizin adını myphpinfo.php olarak isimlendirin ve masaüstüne kayıt edin.

3- Xampp’in kurulu olduğu yolu açın eğer bilmiyorsanız XAMPP uygulamasını açtıktan sonra sağ menüden Explorer alanına tıklayın.

4- Xampp’in kurulu olduğu yolu açın eğer bilmiyorsanız XAMPP uygulamasını açtıktan sonra sağ menüden Explorer alanına tıklayın.

5- Açılan klasörde htdocs klasörünü bulun ve içini açın.

6- Masaüstüne kayıt ettiğimiz myphpinfo.php dosyasını htdocs içerisine kopyalayıp, yapıştırın.

7- Xampp uygulamasında Apache ve Mysql modül servislerini çalıştırın.

8- Tarayıcınızı açın ve adres çubuğuna http://localhost/myphpinfo.php yazın. Açılacak olan ekranda karşınıza direk php versiyonunuz çıkacak. İşte her şey bu kadar basit.

Uzak Sunucu Üzerinde PHP Versiyon Öğrenme

1- Text editörünüzü veya not defterinizi açın. Aşağıdaki kodu boş belgenizin içine yapıştırın.

<?php phpinfo();  ?> 

2- Belgenizin adını myphpinfo.php olarak isimlendirin ve masaüstüne kayıt edin.

3- FTP ile sunucuza bağlanın. Kök dizine, oluşturduğumuz bu php dosyasını yükleyin.

4- sitenizinurladresi/myphpinfo.php adresine giderek php versiyonunuzu öğrenebilirsiniz.



The post PHP versiyonu öğrenme – PHP’de versiyon nasıl öğrenilir? PHP sürümü öğrenme first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/yazilim/php/php-versiyonu-ogrenme-phpde-versiyon-nasil-ogrenilir-php-surumu-ogrenme/feed/ 1
Telefonunuzu Daha Uzun Süre Kullanmak İçin 10 İpucu https://www.kampuskod.com/teknoloji/telefonunuzu-daha-uzun-sure-kullanmak-icin-10-ipucu/ https://www.kampuskod.com/teknoloji/telefonunuzu-daha-uzun-sure-kullanmak-icin-10-ipucu/#respond Fri, 11 Dec 2020 05:15:00 +0000 https://www.kampuskod.com/?p=8637 Dünyadaki en iyi hislerden biri, yeni akıllı telefonunuzu ilk kullandığınız gündür. Hepimiz mümkün olduğu kadar uzun süre mükemmel durumda kalmasını istiyoruz. Bununla birlikte, günlük rutinimiz ve alışkanlıklarımız bu yararlı cihazlar için oldukça acımasız olabilir. İşte sizin için telefonunuzu daha uzun süre kullanmanızı sağlayacak 10 ipucu belirledik. 1. Telefonunuzun şarj bağlantı noktasındaki tozu temizleyin. Portun içini nazikçe kazımak […]

The post Telefonunuzu Daha Uzun Süre Kullanmak İçin 10 İpucu first appeared on Kampüs Kod.]]>
Dünyadaki en iyi hislerden biri, yeni akıllı telefonunuzu ilk kullandığınız gündür. Hepimiz mümkün olduğu kadar uzun süre mükemmel durumda kalmasını istiyoruz. Bununla birlikte, günlük rutinimiz ve alışkanlıklarımız bu yararlı cihazlar için oldukça acımasız olabilir.

İşte sizin için telefonunuzu daha uzun süre kullanmanızı sağlayacak 10 ipucu belirledik.

1. Telefonunuzun şarj bağlantı noktasındaki tozu temizleyin.

Portun içini nazikçe kazımak için bir kürdan kullanın. Tozu gidermek için bağlantı noktasının içinde gezdirin ve ardından tozun düşmesi için telefonu biraz sallayın. Acele etmeyin ve olabildiğince nazik olun, zarar vermek istemezsiniz.

2. Araba pedleri ve paspasları kullanmayın.

Kaymaz ön panel paspasları ve pedleri, telefonunuzun aşağı kaymayacağına dair size gerçek bir garanti vermez. Hala hızlandığınız bir sonraki köşede uçup gitme ihtimali var. Bu tür bir durum telefonunuza ciddi şekilde zarar verebilir veya daha da kötüsü tamamen yok edebilir.

3. Hoparlörünüzdeki suyu ve tozu çıkarın.

Telefonunuz suyla temastan kurtuldu, ancak hoparlörlerden gelen ses boğuk mu? Bunun nedeni, gerçek hoparlörlerde hala bir miktar su kalmış olabilir. İnsanların çoğu akıllı telefonlarını kurutmak için pirinç kullanacak, ancak bunu yapmanın daha verimli bir yolu var. Android ve iOS için bir app veya kısayol indirin ve bunlar hoparlörünüzden suyu çıkarmanıza yardımcı olacaktır.

Tüm suyu sıkıştıran özel bir ses çalarlar. Aynı şey toz için de işe yarar ve eğer bunu düzenli olarak yaparsanız, hoparlörlerinizi yıllarca harika durumda tutarsınız.

4. Telefonunuzu düzenli olarak garanti hizmetlerine getirin.

Bunu yapmak kolaydır ve paranızla birlikte sinirlerinizi de kurtaracaktır. Mağazalardaki ve yetkili servis merkezlerindeki uzmanlar akıllı telefonunuzu teşhis edecek ve sahip olabileceği dahili veya harici hasarları onaracaktır. Bu muhtemelen garantiye bağlı olarak size hiçbir maliyeti olmayacaktır.

5. Telefonunuzu arka cebinize koymayın.

Oraya koyduğunuzu unutabilir, sonra üzerine oturup ezebilirsiniz. Bir telefonu bu şekilde yok etmek çok yazık olur.

6. Kullanmadığınız zaman Bluetooth’u kapatın.

Bluetooth çok kullanışlı bir araçtır ancak tehlikeli de olabilir. Tavsiye, kullanmadığınız zamanlarda kapatmaktır ve bunu yaparak, yolunuza çıkabilecek her türlü zararlı indirmeyi engellemiş olursunuz.

7. Pil tamamen bitmeden akıllı telefonunuzu şarj edin.

Telefonunuzun bataryasının% 0 olmasının bir sakıncası yok, ancak bu çok olursa telefonunuz size çok daha kısa bir süre hizmet edecek. Her akıllı telefonun belirli bir  şarj döngüsü vardır . Bu, telefonunuzu% 100 oranında şarj ettiğinizde ve ardından tamamen bitene kadar kullanın. Bunu düzenli olarak yaparsanız, telefonunuzun pili daha iyi gidecektir.

8. Yazılımınızı düzenli olarak güncelleyin.

Bunlar, karşılaşabileceğiniz bazı hatalardan kurtulmak, akıllı telefonunuzun daha sorunsuz ve daha hızlı çalışmasını sağlamak ve savunmasını güncel tutmak için kullanılan gerekli güncellemelerdir .

9. Havaalanının USB şarj cihazlarını kullanmayın.

Havaalanlarına yayılmış USB şarj cihazları var ve bu havaalanı şarj cihazları bizim için gerçekten çok uygun olabilir, ancak mutlaka güvenli değiller . Telefonunuzu şarj ettikçe veri aktaracaksınız. Bu verilere, aynı bağlantı noktalarını kullanan bilgisayar korsanları tarafından da erişilebilir. Telefonunuzun kablosunu tehlikeli bir bağlantı noktasına taktığınızda, cihazınızı harici bir sürücüye bağlar. Bu, üçüncü tarafların verilerinizi indirmesi, medyanızı videoya sokması ve hatta zararlı yazılımlar yüklemesi sürecini başlatabilir.

10. Telefonunuzu spor kol bandı ile kullanmayın.

Isı , su ve tuz . Bir tarif gibi geliyor, değil mi? Belki yıkım için bir reçete. Bunlar, bir kol bandında taşıdığınızda akıllı telefonunuzu yok edecek 3 faktördür. Hava sirkülasyonunun olmaması aşırı ısınmaya neden olabilir ve teriniz akıllı telefonunuzun şarj bağlantı noktasına bile girebilir. Terin tuzu donanıma zarar verebilir ve hatta herhangi bir tuzlu su gibi cihazınızda başka sorunlara neden olabilir.

Kaynak: 1

The post Telefonunuzu Daha Uzun Süre Kullanmak İçin 10 İpucu first appeared on Kampüs Kod.]]>
https://www.kampuskod.com/teknoloji/telefonunuzu-daha-uzun-sure-kullanmak-icin-10-ipucu/feed/ 0