it-swarm-id.com

Bagaimana saya bisa mencegah pengguna listrik memanggil fungsi ajax saya?

Saya memiliki situs yang menggunakan panggilan ajax untuk melakukan sejumlah fungsi. Mereka memiliki panggilan browser web kembali ke skrip - ajax.php. Meskipun saya menggunakan data posting untuk mengirimkan data dan membatasi perintah yang dapat dipanggil oleh skrip ajax, sebenarnya tidak ada yang mencegah pengguna melakukan spoofing panggilan ajax untuk mencoba memanipulasi situs. Apakah ada beberapa cara untuk mencegah pengguna melakukan spoof pada panggilan? Apakah ada cara untuk memastikan bahwa panggilan ajax sebenarnya berasal dari situs web saya dan bukan dari beberapa skrip atau situs lain?

Atau apakah saya hanya perlu memeriksa syarat-syarat batas dalam skrip php dan mencegah pengguna melakukan spoofing hal-hal yang tidak boleh mereka lakukan, tetapi mengizinkan mereka untuk spoof di mana mereka diizinkan.

12
Daniel Bingham

Saya tidak berpikir ada cara untuk melakukan ini dengan andal, karena informasi apa pun yang Anda kirimkan dapat dipalsukan, tergantung seberapa pintar pengguna itu.

Jika Anda hanya ingin blok sederhana dari orang-orang yang menelepon bukan dari halaman Anda, maka Anda dapat memeriksa pengarah, menggunakan cookie atau menambahkan bidang tersembunyi acak yang dikirim oleh halaman panggilan yang kedaluwarsa setelah waktu tertentu. Tapi ini mudah dipalsukan jika pengguna benar-benar ditentukan.

12
delete

Singkatnya, tidak. Setiap permintaan yang dibuat ke URL melalui GET atau POST dapat dilakukan oleh siapa saja yang menggunakan perangkat lunak apa pun. Sebenarnya, permintaan AJAX benar-benar tidak berbeda dengan memuat URL secara langsung, kecuali dengan yang terakhir data yang dikembalikan ditampilkan di browser seperti halaman web.

Inilah alasan mengapa Anda harus selalu memvalidasi data yang dikirim di server, terlepas apakah Anda melakukan validasi Javascript atau tidak.

Tidak jelas persis apa yang dilakukan skrip sisi server dan apa yang salah, tetapi jika pengguna dapat "memanipulasi situs" dengan memanggil skrip Anda dengan data yang buruk maka You Are Doing It Wrong.

Mungkin solusi terbaik adalah memperkenalkan beberapa bentuk otentikasi.

6
DisgruntledGoat

Jadi pada dasarnya Anda ingin membatasi ajax.php hanya menanggapi permintaan AJAX?

Saya bukan pakar php, tetapi sepertinya memungkinkan untuk menentukan apakah permintaan yang diberikan berasal dari AJAX atau permintaan peramban "biasa" dengan memeriksa nilai $_SERVER['HTTP_X_REQUESTED_WITH'].

Sumber

3
theycallmemorty

Seperti orang lain tunjukkan ... panggilan ajax hanyalah penerima $ _GET atau $ _POST, jadi pendekatan saya selalu memperlakukan mereka seperti saya akan halaman tindakan dan menyaring/membersihkan input. Jika Anda memiliki variasi kecil dari apa yang Anda harapkan seperti satu bulan misalnya, dan Anda tahu itu selalu dalam format "Jan, Feb, Mar ...", Anda bisa menetapkan larik nilai yang diharapkan dan memfilternya. Perangkap apa pun yang tidak cocok dan opsional melemparkan sesuatu seperti "Bzzt ... terima kasih sudah bermain ..."

Saya tidak dapat memikirkan contoh di mana skrip Ajax saya harus lebih aman daripada pengiriman formulir.

HTH

1
digit1001

Saya pikir sebagian besar solusi Anda akan membatasi tingkat lalu lintas dari sidik jari pengguna tertentu. Mungkin hash alamat IP, string Agen Pengguna dan data yang dikirim.

Juga, mengikat halaman yang memanggil ajax ke data yang dikembalikan ajax lebih dekat bisa membantu. Jadi pada halaman yang dipermasalahkan, pada pemuatan halaman, kirim kunci sesi yang baik untuk sesi X, untuk setiap permintaan ajax, JavaScript Anda harus meneruskan kunci itu kembali atau ajax akan mengembalikan kegagalan. Setelah halaman Anda mencapai X+1 panggilan ajax, paksa pengguna untuk melakukan beberapa tindakan (mungkin captcha? Mungkin bahkan sesuatu seperti acara mousemove atau tap tergantung pada UA) sebelum mengirim kunci sesi baru ke bawah kawat (keluar dari band) dari ajax asli) kemudian restart prosesnya.

Meskipun ketika saya memikirkannya, mungkin saja bagian dari masalah Anda adalah lemahnya validasi dari parameter yang dikirim. Jika orang hanya bisa bermain dengan parameter yang dikirim dan mendapatkan kembali data yang valid maka membuatnya lebih sulit untuk dilakukan. Cara melakukannya tergantung pada nilai apa yang dikirim oleh klien, dan kejahatan seperti apa yang dapat dilakukan oleh aktor yang buruk dengan mengirimkan nilai-nilai buruk.

0
artlung