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:
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.
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:
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 mimariyi analiz ettik, şimdiyse gelin mikroservis mimarisine bakalım.
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:
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.]]>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.
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
1- Keycloak admin paneline http://localhost:8085/ adresinden erişiniz. Administration console tıklayarak admin olarak giriş yapınız.
2- demo isminde yeni bir realm oluşturun.
3- Şimdiyse demo-app isminde yeni bir client oluşturacağız. Access type olarak public, Valid Redirect URI olarakta * veriniz. Ve ayarları kaydediniz.
4- Kullanıcı oluşturalım.
Keycloak ayarlarımızı tamamladık. Şimdiyse Spring Boot projesi kısmına geçelim.
1- IntelliJ IDEA üzerinden New Project diyerek açılan pencereden Spring Initializr tabını seçelim ve projemizi SpringBootKeycloak şeklinde isimlendirelim.
2- Spring Web ve Spring Security bağımlılıklarını projemize dahil edelim.
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.
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.
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.
Üretilen access_token JWT token olarak üretilmiştir. https://jwt.io/ adresine bu access token’ı yapıştırarak token içerisindeki bilgilere erişebilirsiniz.
The post Keycloak Kullanarak Güvenli Java Spring Boot REST API Uygulaması first appeared on Kampüs Kod.]]>
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.
Ö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.]]>
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.
Son olarak sol taraftaki Connect ( ) butonuna basarak Docker’a bağlanın. Imagelarınızı ve Containerlarınızı görebilirsiniz.
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.]]>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 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.]]>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.]]>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 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:
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 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();
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”/>
İ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.
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.
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.
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ı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.
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.
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.]]>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.
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.
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.
İşte sizin için telefonunuzu daha uzun süre kullanmanızı sağlayacak 10 ipucu belirledik.
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.
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.
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.
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.
Oraya koyduğunuzu unutabilir, sonra üzerine oturup ezebilirsiniz. Bir telefonu bu şekilde yok etmek çok yazık olur.
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.
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.
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 .
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.
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.]]>