Twice bir eylem gerçekleştirme kullanıcıları engelleyin

3 Cevap php

Kullanıcıların kullanıcıların bunu sağlamak için bir mekanizma var ama nedense hala olur, iki kez belirli bir eylem gerçekleştirerek ile bazı sorunlar var. İşte bizim mevcut mekanizma nasıl işliyor:

  1. Client side: düğmesi 1 tıklama sonra devre dışı kalacaktır.
  2. Server side: Biz eşleşen kez, anahtar silinir, OTURUMLARIN depolanan anahtar karşı kontrol edilecektir URL önemli bir karma var.
  3. Eylem gerçekleştirildikten sonra Database side:, kullanıcı eylemi tamamladı belirten bayraklı gereken bir alan vardır.

Ancak, tüm bu önlemler, hala iki eylemi gerçekleştirmek mümkün kullanıcılar herhangi daha güvenli yöntemler, orada vardır?

Burada veritabanı tarafı için kısmi kodu:

$db->beginTransaction();
// Get the user's datas
$user = $db->queryRow("SELECT flag FROM users WHERE userid = {$auth->getProperty('auth_user_id)}");
if ($user['flag'] != 0) {
    $db->rollback();
    // Return with error
    return false;
}
// Proceed with performing the action
// --- Action Here ---
// Double checking process, the user data is retrieved again
$user = $db->queryRow("SELECT flag FROM users WHERE userid = {$auth->getProperty('auth_user_id)}");
if ($user['flag'] != 0) {
    $db->rollback();
    // Return with error
    return false;
}
// --- The final inserting query ---
// Update the flag
$db->query("UPDATE users SET flag = 1 WHERE userid = {$auth->getProperty('auth_user_id)}");
$db->commit();
return true;

3 Cevap

Bu kötü adamları yenmek için tüm tedbirleri almış olduğunu görmek iyidir. Kötü adamlar açısından konuşma:

Finally:

: Ben kontrol etmek size tavsiye ederim

OWASP PHP Project

OWASP PHP Projesi'nin hedefi (OWASP PHP Project Yol Haritası) PHP programlama dili kullanılarak inşa güvenli uygulamaları oluşturmak ve dağıtmak için geliştiriciler, sistem yöneticileri ve uygulama mimarları sağlamaktır.

Peki JS yöntemi ve karma yöntem bazı azılı adam tarafından aldatılmış olabilir, ama 3 yöntem fazlalığı korumak için çok iyi gibi görünüyor. Bu geçmiş olsun bazı programlama kusur olmalı.

Eğer yerine değerleri ekleme nerede Neden u sadece sayfadaki bayrak alanını kontrol yok burada user (şimdi bunu yapıyor ise) eylem gerçekleştirerek

Pseudocode şöyle:

<?

$act_id; // contains id of action to be executed

$h = uniqid('');

// this locks action (if it is unlocked) and marks it as being performed by me.
UPDATE actions SET executor = $h WHERE act_id = $act_id AND executor = ''; 

SELECT * FROM actions WHERE executor = $h;

//
// If above query resulted in some action execute it here
//

// if you want to allow for executing this exact action in the future mark it as not executed
UPDATE actions SET executor = '' WHERE act_id = $act_id; 

Önemli şeyler:

  • First query should be update claiming the action for me if it is yet unclaimed.
  • Second should be query grabbing action to execute but only if it was claimed by me.