• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

Geldtransfer zwischen eigenen Avataren (auch bei gesperrten Accounts)

Archon Short

Forumsgott/göttin
Hallo,

immer wieder lese ich, daß hier der eine oder andere Account mal auf Eis gelegt wird.
Man kann sich selbst mit dem Account nicht mehr einloggen, aber der Marketplace-Laden und die inworld Vendoren laufen problemlos weiter.

Jetzt ist das Ganze eine bescheidene Situation, da man ja auch an seine L$ herankommen möchte.

Daher mal dieses kleine, aber sehr nützliche Script, das jeder der Avatare in einer Box irgendwo (z.B. Bauplattform) gerezzt haben muss:

Code:
list List_keys  =      [HIER DIE AVATARKEYS EINTRAGEN];
//######################################

integer         I_chan;
integer         I_handle;
string          toucher;
default
{
    state_entry()
    {
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
    }
    on_rez(integer honk)
    {
        llResetScript();
    }
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_DEBIT)
        {
            state running;
        }
    }
}

state running
{
    state_entry()
    {
        llSetPayPrice(1, [PAY_HIDE ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }
    touch_start(integer ii)
    {
        toucher = llDetectedKey(0);
        
        if(llListFindList(List_keys,[toucher]) == -1)return;
        
        I_chan=llFloor(llFrand(999999)-1111111);
        I_handle = llListen(I_chan,"","","");
        llTextBox(toucher,"Gib hier mal Ein wieviele L$ Du haben willst",I_chan);
        llSetTimerEvent(30);
    }
    timer()
    {
        llSetTimerEvent(0);
        llListenRemove(I_handle);
        llSay(0,"Timeout");
    }
    money(key id, integer amount)
    {
        llInstantMessage(id, "DANKE");
    }
    listen(integer channel, string name, key id, string message)
    {
        integer i = (integer)message;
        llGiveMoney(toucher,i);
        llSetTimerEvent(0);
        llListenRemove(I_handle);
    }
}

Eventuell ist es ja für den Einen oder Anderen ganz nützlich.
Ich hab es auch aufgestellt um mir mal fix L$ von meinem Hauptaccount zu holen, wenn ich grad mal wieder bisserl klamm bin.
Früher musste ich einloggen und Geld überweisen, heute macht das eine kleine Box inworld für mich.

LG Archon


PS: Offtopic und Politblödeleien bitte ich hier zu unterlassen. Diese werden, entweder durch mich selbst oder nachdem die Beiträge gemeldet wurden, gelöscht.
 
Zuletzt bearbeitet:
Wenn Du das nun noch so einstellst, dass auch ICH Geld von DEINEM Hauptaccount holen kann, gibt es einen grünen Daumen.


Edit: Ok, hat geklappt. Daumen vergeben.
 
Wenn ich das richtig verstanden habe, dann muss die Box von dem Hauptava gerezzt werden, der als Geldspender funktionieren soll. Vor einer evtl. Sperre. Ist der gesperrt und hat die Box nicht aufgestellt, dann ist es vorbei.

Nur der Vollständigkeit halber, falls jemand vorbeikommt und so eine Lösung für seinen bereits gesperrten Geldspender sucht.

Nichtsdestotrotz: Danke für das Script, das kann schon mal aus der Patsche helfen wenn man rechtzeitig vorsorgt.
 
Schönes Script, ich kann es aber nicht lassen noch kurz etwas anzumerken. ;)

Da es ja um Geld geht - und im Zweifel um viel davon - ein Hinweis auf eine Sicherheitslücke.

Du schreibst den key, desjenigen der das Objekt anklickt, vor der Überprüfung ob er überhaupt Berechtigt ist, in eine globale Variable die du hinterher dazu benutzt festzulegen wer das Geld bekommt.

Ich würde hier:
Code:
 touch_start(integer ii)
    {
        toucher = llDetectedKey(0);

die globale Variable toucher erst durch eine lokale ersetzen und nach der Überprüfung der Zugangsberechtigung die globale Variable überschreiben. Nach Abschluss der Interaktion am besten toucher auch gleich noch reinitalisieren.

Ansonsten könnte folgendes Passieren: Wenn, wärend du selber noch den Betrag in die TextBox eingibst, jemand anderes auf das Objekt mit dem Script klickt, wird die globale Variable toucher auf den key des 'Angreifers' geändert und nicht du, sondern er erhält das Geld. Das selbe gilt auch für Avatare die legitim darauf zugreifen dürfen, deswegen gleich besser einen eigene state, der keinen touch handler besitzt, für die Interaktion.

Ich weiß, "wenn man aufpasst" ist die Wahrscheinlichkeit recht gering aber sicher ist sicher. Gerade wenn es um Geld geht. (Auch wenn das Ding in belebten Gegenden steht, wo der ein oder andere es doch mal entdeckt.)

Ich war mal so frei: :D
Code:
list List_keys  =      [HIER DIE AVATARKEYS EINTRAGEN];
//######################################

integer         I_chan;
integer         I_handle;
string          toucher;
default
{
    state_entry()
    {
        llRequestPermissions(llGetOwner(), PERMISSION_DEBIT);
    }
    on_rez(integer honk)
    {
        llResetScript();
    }
    run_time_permissions(integer perm)
    {
        if (perm & PERMISSION_DEBIT)
        {
            state running;
        }
    }
}

state running
{
    state_entry()
    {
        llSetPayPrice(1, [PAY_HIDE ,PAY_HIDE, PAY_HIDE, PAY_HIDE]);
    }
    touch_start(integer ii)
    {
        key who = llDetectedKey(0);
        
        if(llListFindList(List_keys,[(string)who]) == -1)return;

        I_chan=llFloor(llFrand(999999)-1111111);
        I_handle = llListen(I_chan,"",who,"");
        llTextBox(who,"Gib hier mal Ein wieviele L$ Du haben willst",I_chan);
        llSetTimerEvent(30);

        toucher = who;
    }
    timer()
    {
        llSetTimerEvent(0);
        llListenRemove(I_handle);
        llSay(0,"Timeout");
    }
    money(key id, integer amount)
    {
        llInstantMessage(id, "DANKE");
    }
    listen(integer channel, string name, key id, string message)
    {
        integer i = (integer)message;
        llGiveMoney(toucher,i);
        llSetTimerEvent(0);
        llListenRemove(I_handle);
    }
}

Gruß,
Johanna

EDIT: Achso, wenn wir schon dabei sind: Den Listener auf den Avatarkey beschränken. Dann muss man auch keinen zufälligen Kanal nehmen. Denn wenn zufällig ein anderes Script in Hörweite auch auf dem ausgewürfelten Kanal irgendetwas sendet, kann das auch schon mal in die Hose gehen.
 
Zuletzt bearbeitet:
Danke Johanna, das ist ungefähr so wie Hippomultivendoren der ersten Generation.
Die hatten gravierende Sicherheitsmängel.
Man wählte das billigste Produkt (zb 1L Demo) aus, öffnete den Bezahldialog und blätterte dann weiter.....


eine weitere Methode, falls nur der Viewer gesperrt ist (Temp-Bann)
Der Empfänger hat einen Marktplatzshop, verkauft zB Primwürfel für 1000L$ das Stück und unser Inworld gesperrter User kauft ein paar davon.
 

Users who are viewing this thread

Zurück
Oben Unten