java - Prinsip pelaksanaan kod pengesahan imej
怪我咯
怪我咯 2017-05-27 17:41:18
0
4
1049

**Tapak web ujian:
http://con.monyun.cn:9960/acc...

Terdapat kod pengesahan pada halaman ini. URL kod pengesahan ini ialah

<img src="../aut_checkCode.hts?=0.8963835985936632" class="icd">

Bagaimana untuk menukar imej yang dipaparkan apabila mengklik pada kod pengesahan? ?

Arahan:
(1) Apabila anda mengklik pada imej kod pengesahan, nombor di belakang atribut src tag img akan berubah Apabila nombor itu berubah, ia akan menyebabkan pelayar mengakses URL baharu untuk mendapatkan data

(2) Rentetan pertanyaan dalam URL baharu hanya mengandungi nilai tetapi tiada nama Adakah itu bermakna bahagian pelayan tidak boleh mendapatkan nilai berangka ini?
0.8963835985936632

Adakah terdapat cara untuk mendapatkan nilai berangka ini di sisi pelayan? ?

(3) Jika tiada cara untuk mendapatkan nilai digital. Bahagian pelayan memproses permintaan dan mengembalikan data imej binari.
Adakah token akan dijana untuk gambar pada masa ini? Jika dijana maka bagaimana untuk menyampaikannya kepada pelanggan?

(4) Pengguna menyerahkan kod pengesahan. Pemprosesan sebelah pelayan, jadi bagaimana untuk mengesahkan sama ada kod pengesahan yang diserahkan oleh pengguna adalah betul?
Bagaimanakah pelayan boleh mendapatkan kod pengesahan yang betul daripada redis?

Semua orang tolong beritahu saya
Sila beri saya thumbs up jika anda membalas! **

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(4)
Ty80

Terima kasih atas jemputan Secara umumnya, langkah kerja kod pengesahan adalah seperti berikut:

.
  1. Malah, pelayan menjana rentetan 4 digit, menggunakan rentetan 4 digit ini untuk menjana imej dan menulisnya ke dalam respon, mengembalikannya ke penyemak imbas dan menulis rentetan 4 digit ini Rentetan wujud dalam sesi semasa.response中, 返回给浏览器, 并把这个4位字符串存在了当前session中.

  2. 浏览器提交后, 用提交的字符串和session中的字符串进行对比, 完成验证码的校验.

如果不用session比如可以设置到cookie中如下(key=test, value=test
Selepas penyemak imbas menyerahkan, bandingkan rentetan yang diserahkan dengan rentetan dalam sesi untuk melengkapkan kod pengesahan Jika anda tidak menggunakan session, sebagai contoh, anda boleh menetapkannya dalam cookie seperti berikut (key=test, value=test kod>): # 🎜🎜#

#🎜🎜##🎜🎜#
淡淡烟草味

1. Perubahan nombor berikut adalah untuk mengelakkan masalah caching pelayar
2 )

3. Prinsip kod pengesahan adalah untuk menjana rentetan nombor rawak dan menyimpannya dalam sesi dahulu, dan akhirnya menjana imej dan menghantarnya kepada pelanggan untuk pengenalan, dan pelayan membandingkan jawapan anda dengan nombor rawak dalam sesi yang sama Ini bermakna pengesahan berjaya

4.Suka 3

5 Apabila digunakan dengan redis, token atau sesi biasanya digunakan, supaya ia boleh mengenal pasti pengguna mana kod pengesahan itu, seperti kunci berikut

.
>keys *
>uid_100_login_verify

pseudokod

Dapatkan kod pengesahan

User u=User();
u.tmp_id=100;//唯一标识,传给客户端表单
Random rand=new Random(种子);
int v=rand.rand();//一般会生成其他得英文字母配合生成复杂的
redisCli.add("uid_100_login_verify",random)//key,value
res.return(new Verify());

Sahkan

User u=User();
u.tmp_id=$POST['tmp_id'];//获取客户端
string value=redisCli.get("uid_100_login_verify");//key return value
if($POST['verify_code']===value){
  return "验证成功";
}
为情所困

Yang pertama: Proses umum kod pengesahan adalah sama seperti yang anda nyatakan.

Yang kedua:
Tidak perlu menghantar nilai ke latar belakang untuk menjana kod pengesahan
Dalam contoh yang anda berikan, perubahan dalam rentetan nombor berikutnya sebenarnya kepada. minta semula URL, #🎜 🎜# Secara amnya, pautan imej menghala ke pautan yang menghasilkan kod pengesahan Selepas mengklik, gunakan js untuk menukar sambungan, iaitu menambah rentetan nombor rawak selepas itu, supaya penyemak imbas mengesan bahawa sambungan di belakang src telah berubah (rentetan rawak ialah fungsi ini), dan kemudian meminta latar belakang sekali lagi untuk mendapatkan imej kod pengesahan yang dijana semula.

Yang ketiga:

Selepas imej binari dikembalikan di latar belakang, tidak perlu menjana token, tetapi rentetan nombor yang digunakan untuk menjana kod pengesahan perlu disimpan dalam sesi. Ia selamat untuk menyimpannya di bahagian pelayan dan tidak perlu dikembalikan kepada pelanggan.

Keempat:

Selepas pengguna memasukkan kod pengesahan yang diserahkan, nombor kod pengesahan yang diserahkan oleh pengguna dibandingkan dengan nombor dalam sesi pelayan. Jika mereka sama, pengesahan diluluskan.

Untuk akhirnya meletakkan kod pengesahan ke dalam redis, anda boleh mencari maklumat yang berkaitan tentang cara menyimpan sesi ke redis.

Ty80

Kod latar belakang biasanya

public void genAuthImage(){

//Jana token uuid
//Tulis kuki
response.addCookie();--->sebenarnya tetapkan maklumat pengepala set-kuki

//Jana gambar dan tuliskannya menggunakan respons
akhir
}
Hujung hadapan:

Hujung hadapan:

semak krom

Konsol

Kesimpulan tidak pasti: Apabila jenis respons adalah imej/jpg, kuki tidak boleh ditetapkan.
Sesiapa yang dah tengok boleh terangkan sebabnya

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan