Cara memeriksa apakah suatu string adalah url dengan python

Itu selalu merupakan ide yang baik untuk memeriksa apakah sebuah string atau url valid atau tidak sebelum mencoba membuat permintaan. Permintaan akan tetap gagal tetapi jika kami mengujinya sebelum itu, kami selalu dapat menghindari kegagalan itu

Dengan python, kita dapat dengan mudah mengetahui apakah sebuah url valid atau tidak. Dalam posting ini, saya akan menunjukkan kepada Anda bagaimana melakukannya dengan contoh

modul validator

validator adalah modul python yang menyediakan berbagai jenis metode validasi. Dengan menggunakan modul ini, kita dapat memvalidasi berbagai jenis input dengan Python

Untuk memvalidasi url, kita bisa menggunakan metode url. Metode ini didefinisikan sebagai berikut

def url(value, public=False)

Dibutuhkan url sebagai nilai. Jika url valid, ia mengembalikan True, selain itu akan membuang satu ValidationFailure. public disetel ke True untuk alamat IP publik

Di bagian ini, tugasnya adalah menemukan apakah string berisi URL dan jika kondisinya benar, URL dikembalikan

import re


def ck_url(x):
# Regular expression for url
    re_equ = r"(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))"
    ck_url = re.findall(re_euq, x)
    if ck_url:
        return "The url in the string is : ",[i[0] for i in ck_url]
    else:
        return "No URL present!"
       
ip_str = input("Enter the string : ")
print(ck_url(ip_str))
_

Keluaran 1

Program to check whether the given string contains URL Output 1

Keluaran 2

Program to check whether the given string contains URL Output 2

Penjelasan

Dalam kode python di atas, untuk memeriksa URL dalam string kami telah membuat ekspresi reguler untuk URL dan dengan menggunakan fungsi built-in findall() kami memeriksa pola URL dalam string input. Fungsi findall() memindai string dari kiri ke kanan dan nilainya dikembalikan

Segala sesuatu di internet memiliki Uniform Resource Locator (URL) yang mengidentifikasinya secara unik — memungkinkan pengguna Internet untuk mendapatkan akses ke file dan media lain. Misalnya, artikel ini memiliki URL unik yang membantu perayap pengoptimalan mesin telusur (SEO) mengindeksnya untuk ditemukan pengguna.  

Definisi pertama dari sintaks URL ada di 1994 Request for Comments (RFC) 1738. Sejak saat itu, struktur URL telah mengalami banyak revisi untuk meningkatkan keamanannya. Namun, pengembang sering gagal menggunakan definisi RFC sebagaimana dimaksud, berkontribusi terhadap banyak serangan berbahaya

Contoh terbaru adalah exploit RCE 0-day yang ditemukan di Log4j, paket logging Java yang populer. Serangan ini terjadi ketika Java Naming and Directory Interface (JNDI) mengevaluasi string log berbahaya. JNDI adalah API Java untuk layanan direktori yang memungkinkan klien perangkat lunak Java menemukan dan mencari data dan sumber daya (dalam bentuk objek Java) menggunakan nama. Saat mengevaluasi string log berbahaya, ia terhubung ke server jarak jauh dan mengeksekusi kode Java berbahaya. Oleh karena itu, perusahaan harus terus memvalidasi URL yang disediakan oleh agen eksternal, seperti pelanggan, mitra, dan sebagainya

Contoh lain adalah serangan pemalsuan permintaan sisi server yang dapat membahayakan program server saat mengakses URL yang tidak aman. Pengguna jahat dapat memanfaatkan bidang masukan yang disediakan untuk menyebabkan kerusakan pada solusi web kami — dan lebih buruk lagi, citra publik organisasi kami

Dalam artikel ini, kami akan menjelajahi tantangan URL yang rusak, bagaimana URL tersebut dapat merusak aplikasi Anda, dan cara untuk mengatasi masalah tersebut. Untuk mengikuti, pastikan Anda telah menginstal dan mengatur Python di mesin Anda.  

Risiko keamanan dengan URL

URL bisa berisiko, karena dapat mengarahkan pengguna dari halaman web yang sah ke halaman yang berbahaya. Mereka juga dapat membuka beberapa vektor serangan — termasuk cross-site scripting (XSS), kerentanan keamanan di beberapa aplikasi web. Kerentanan XSS memungkinkan penyerang menyuntikkan skrip sisi klien ke halaman web yang dilihat oleh pengguna lain

Risiko keamanan ini dapat menimbulkan konsekuensi serius di industri tertentu, seperti perbankan. Pelanggan yang tidak mengetahuinya dapat membuka halaman yang tampak asli yang dikendalikan oleh penyerang karena mereka yakin itu adalah halaman login untuk aplikasi perbankan mereka. Ini adalah jenis serangan phishing, dibangun di atas rekayasa sosial, di mana penyerang mengirimkan pesan penipuan, palsu, atau menipu yang dirancang untuk mengelabui seseorang agar mengungkapkan informasi sensitif kepada penyerang. Mereka juga dapat menyebarkan perangkat lunak berbahaya di infrastruktur korban, termasuk ransomware. Jika penyerang menangkap nama pengguna dan kata sandi pengguna perbankan, penyerang dapat menggunakan informasi ini untuk masuk ke rekening bank pengguna dan menyebabkan kerusakan

Serangan yang lebih canggih dengan URL dapat terjadi karena pemalsuan permintaan sisi server. Serangan ini terjadi di server yang mengirimkan permintaan ke URL yang disediakan oleh pelanggan. Saat membuat permintaan, penyerang dapat mengambil alih server untuk melakukan tindakan yang tidak diperbolehkan, seperti memindai port dan informasi jaringan, meminta metadata infrastruktur, mencetak, dan mengeluarkan informasi sensitif seperti kata sandi atau token

Bagian berikut menunjukkan cara memvalidasi dan membersihkan URL yang tidak Anda kontrol. Misalnya, jika kami membangun platform sosial tempat pengguna dapat berkomunikasi dan berbagi data, kami dapat mengontrol URL mana yang diizinkan dan mana yang dapat kami sembunyikan

Cara melakukan validasi URL dengan Python

Python, bahasa pemrograman, banyak digunakan untuk membangun aplikasi web dan situs untuk jutaan pelanggan di seluruh dunia. Meskipun Python tidak memiliki pemindai dan validator URL bawaan, parser dan validator URL berbasis komunitas tersedia untuk Python — yang dapat digunakan untuk memvalidasi URL kita dan membuatnya lebih aman. Beberapa kerangka kerja aplikasi web juga menyediakan pemindai dan validator URL untuk mengembangkan aplikasi web

Memvalidasi URL

Salah satu metode validasi URL yang populer di Python adalah paket validator Python. Kita dapat menggunakan paket validator untuk menentukan apakah suatu URL valid. Agar valid, URL harus

  • Terbentuk dengan baik, artinya mengikuti semua aturan spesifikasi HTTP atau HTTPS
  • Miliki sumber daya di alamat tersebut, karena URL tidak valid tanpa sumber daya terkait

Paket validator Python memaparkan metode URL yang memverifikasi URL, dan menguji apakah itu aman, dan mencari kata kunci dan karakter yang tidak valid. Jika URL tersedia di domain publik (artinya tidak berada di belakang firewall, paywall, atau penghalang lain untuk mengakses), itu akan melewati alamat IP internal mana pun

Untuk menggunakan paket validator, unduh dan atur ketergantungan pada lingkungan Python lokal Anda menggunakan pip. Untuk mengunduh paket validator, jalankan kode berikut di terminal lokal atau antarmuka baris perintah Anda

$ python3 -m pip install validators

Setelah perintah ini selesai, kami akan memiliki paket validator di mesin kami

Selanjutnya, buat file Python bernama main.py, dan tulis kode Python untuk menguji URL

import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")

Setelah memasukkan kode ini ke dalam file main.py_, jalankan kode dalam juru bahasa Python menggunakan antarmuka baris perintah Python

$ python main.py
_

Kode mencetak "URL is invalid" karena ada

import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
0 karakter yang hilang di URL setelah
import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
1

Paket juga dapat menentukan apakah URL dapat diakses publik, yang berguna saat mencoba memvalidasi apakah pengguna mencoba meminta alamat IP internal. Tambahkan kode berikut dalam file Python yang sama dan jalankan untuk mencoba dan memvalidasi URL

validation = validators.url("https://10.0.0.1", public=True)
if validation:
print("URL is valid")
else:
print("URL is invalid")

Sekali lagi, output menyatakan bahwa URL tidak valid. Ini karena URL tidak tersedia di domain publik — meskipun faktanya tidak ada masalah dengan URL itu sendiri. Untuk mempelajari lebih lanjut tentang fitur paket validator, lihat dokumentasinya

Parsing menggunakan ekspresi reguler

Pendekatan lain yang dapat kita gunakan untuk memvalidasi URL adalah menggunakan ekspresi reguler. Kami dapat, misalnya, menggunakan ekspresi reguler untuk meminta URL menyertakan HTTPS sebelum dapat divalidasi. Kode untuk menyelesaikan validasi ini terlihat seperti ini

^https:\/\/[0-9A-z.]+.[0-9A-z.]+.[a-z]+$
_

Ekspresi reguler ini cocok dengan istilah

import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
_2, tetapi tidak
import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
3, meskipun keduanya merupakan URL yang valid. Anda dapat mempelajari lebih lanjut tentang ekspresi reguler di situs web ini. Kita bisa mencoba ekspresi di atas dalam kode Python

import re
 
pattern = "^https:\/\/[0-9A-z.]+.[0-9A-z.]+.[a-z]+$"
result = re.match(pattern, "https://www.google.com")

if result: 
print(result)
else:
print("Invalid URL")

Keluaran untuk kode di atas adalah URL yang cocok. Jika Anda mengubah string URL di atas dan menghapus HTTPS atau menjadikannya HTTP, Anda mendapatkan objek

import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
4 — menunjukkan tidak ada URL yang cocok

Namun, ekspresi reguler rumit dan tidak praktis untuk skenario dunia nyata. Ekspresi reguler sulit dibaca dan rumit untuk di-debug dan diskalakan. Inilah sebabnya perpustakaan umumnya merupakan solusi yang lebih baik

Untuk kasus penggunaan ekspresi reguler yang lebih lanjut yang mem-parsing URL dengan semua struktur dan sintaks yang sesuai, lihat utas Stack Overflow ini

Salah satu keuntungan menggunakan ekspresi reguler adalah Anda juga dapat menemukan URL yang tidak valid di dalam string input. Ini hanya mungkin dengan ekspresi reguler — dan bukan dengan perpustakaan umum. Paket validator tidak berfungsi, bahkan jika string berisi spasi putih di belakang atau sebelumnya. Untuk menggunakan paket dengan sebaik-baiknya, Anda harus membersihkan string input dan meneruskannya ke paket validator

Menggunakan urllib

Paket lain yang mem-parsing URL dan memperlihatkan bagian-bagian dari URL adalah urllib. Kita bisa menggunakannya dengan interpreter Python 3.  

Kode berikut memverifikasi apakah URL valid

from urllib.parse import urlparse
result = urlparse("https:/www.google.com")
if result.scheme and result.netloc:
print("Success")
else:
print("Failed")
 
print(result)

Ketika kami mengatur skema dan bidang

import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
_5 untuk variabel
import validators
 
validation = validators.url("http:/www.google.com")
if validation:
print("URL is valid")
else:
print("URL is invalid")
6, URL valid dan dapat digunakan. Jika tidak, URL tersebut tidak valid, dan kami harus berhati-hati

Mengidentifikasi kerentanan umum

Beberapa kerangka kerja di Python, seperti Django, menyediakan paket validator bawaan yang memungkinkan kami memvalidasi URL dalam kerangka itu. Namun, tantangan dengan mengandalkan pustaka ini adalah, meskipun kami terbiasa dengan kerangka kerja tersebut, kami masih harus memastikan bahwa paket itu sendiri aman. Dan open source hanya membuat mempercayai paket menjadi lebih kompleks

Kami dapat menggunakan alat keamanan seperti Snyk Advisor untuk meninjau dengan cepat semua paket sumber terbuka yang kami gunakan — dan paket baru yang ingin kami terapkan — untuk kerentanan umum. Dari ulasan ini, Snyk memberi kami laporan keamanan yang dapat kami gunakan untuk menentukan apakah paket tersebut harus disertakan atau tidak. Misalnya, kami dapat menggunakan Snyk Advisor untuk memastikan paket kami, seperti paket validator yang kami gunakan dalam demonstrasi di atas, aman.  

Kami juga dapat menggunakan Sumber Terbuka Snyk bersama Penasihat Snyk untuk menemukan masalah lisensi, kerentanan, dan masalah terkait keamanan lainnya yang mungkin ada di tumpukan alat sumber terbuka kami. Dan, kita dapat berkonsultasi dengan Snyk Vulnerability Database (VulnDB) untuk mencari kerentanan terkait URL yang diketahui — seperti kerentanan ini dalam kerangka Flask, yang mengarahkan pengguna ke lokasi tanpa validasi URL. Dengan berkonsultasi dengan database ini, kami dapat mengamankan halaman web dan aplikasi kami secara proaktif

Memvalidasi URL dengan Python

Dalam artikel ini, kami menjelajahi tantangan yang ditimbulkan oleh URL yang tidak dibersihkan ke aplikasi web, dan cara membersihkan URL sesuai kebutuhan. Kami mulai dengan validasi dasar URL menggunakan paket validator dan urllib. Dan mendemonstrasikan cara menggunakan paket-paket ini untuk mengonfirmasi apakah semua URL bersifat publik, atau jika ada URL internal yang digunakan untuk menyerang aplikasi web. Kemudian, kami menggunakan ekspresi reguler primer untuk menunjukkan bagaimana kode satu baris sederhana dapat memindai URL untuk informasi dasar yang diperlukan, seperti semua URL menjadi HTTPS. Kami juga membahas mengapa ekspresi reguler merupakan cara yang rumit dan menantang untuk memvalidasi URL

Terakhir, kami membahas cara terbaik memilih pustaka sumber terbuka yang aman. Snyk Advisor menyediakan sumber kebenaran yang berharga saat menggunakan paket sumber terbuka. Untuk informasi selengkapnya, tinjau lembar contekan praktik terbaik keamanan Python untuk membantu menyiapkan continuous integration and continuous development pipeline (CI/CD) untuk meninjau setiap kerentanan yang ditambahkan ke kode Anda

Amankan perangkat lunak sumber terbuka Anda secara gratis

Buat akun Snyk hari ini untuk menemukan dan memperbaiki masalah lisensi, kerentanan, dan masalah terkait keamanan lainnya

Mendaftar gratis

Diskusikan blog ini di Discord

Bergabunglah dengan Komunitas DevSecOps di Discord untuk membahas topik ini dan lebih banyak lagi dengan praktisi lain yang berfokus pada keamanan

Bagaimana Anda memeriksa apakah suatu string memiliki URL dengan Python?

Untuk menemukan URL dalam string tertentu, kami telah menggunakan fungsi findall() dari modul ekspresi reguler Python . Ini mengembalikan semua kecocokan pola dalam string yang tidak tumpang tindih, sebagai daftar string. String dipindai dari kiri ke kanan, dan kecocokan dikembalikan dalam urutan yang ditemukan.

Bagaimana cara saya memeriksa apakah suatu string adalah URL?

HTMLInputElement. metode checkValidity() digunakan untuk memeriksa apakah string dalam atribut nilai elemen

Bagaimana cara memeriksa status URL dengan Python?

Ada banyak cara untuk memeriksa status situs web dengan Python melalui HTTP. Mungkin yang paling umum adalah membuka koneksi ke server menggunakan fungsi urlopen(), lalu memanggil fungsi getcode() pada HTTPSConnection terbuka . Anda dapat mempelajari lebih lanjut tentang fungsi pustaka standar ini di sini. urllib.

Bagaimana Anda mengekstrak URL dari string menggunakan Python?

Fungsi findall() digunakan untuk menemukan semua instance yang cocok dengan ekspresi reguler dan mengekstrak URL dari teks string untuk memasukkannya ke dalam array . Ekstraksi URL dicapai dari file teks dengan menggunakan ekspresi reguler. Ekspresi mengambil teks di mana pun itu cocok dengan polanya.