Förhindra användare att "gilla" igen.

Permalänk
Medlem

Förhindra användare att "gilla" igen.

Hej!

Har utvecklat en app som jag tror har lite potential, där jag har en like funktion.

Nu har jag valt att göra appen, öppen. I detta fall betyder det att man inte behöver skapa ett konto osv..

Just nu fungerar "likefunktionen" så här när man trycker på like:

Appen skickar data till en webbserver och triggar ett php script som ökar antalet likes, därefter lagras "id" för den profil man gillat lokalt i telefonen.

Detta förhindrar användaren att gilla profilen igen... tills man ominstallerar appen eller rensar cache.

Absolut skulle jag kunna skapa en tabell i databasen om vilka X profiler man gillat med tex, Mac adressen Y.

Men känns som en seg och dålig ide om man får många användare. Nu kommer det sannolikt inte hända, men tänk om 300 000 personer gillat en profil. Query'n för att kolla igenom om man tidigare gillat den borde väl ta lite tid? Har inte jobbat med stora databaser tidigare. Så jag kanske har fel?(väldigt lite info som lagras i databasen).

Att man kan gilla en profil från olika enheter gör mig inget. Men att endast kunna installera om appen & sedan gilla profilen igen är lite irriterande.

Konstig aktivitet kan jag kolla med ett cron job & ta bort skum aktivitet från databasen.

Har ni några smarta lösningar på detta, så slipper jag tänka själv! haha! Tack på förhand!

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem

Har du en tabell med enbart integers och sen en annan tabell med personinfo (mac-adress osv) då kan du ha miljoner rader innan det blir ett problem. Sen lägger du på lämpliga index vid sökning samt komprimera då lär det inte vara några problem.

Permalänk
Medlem

Lägg listan över likes på användaren i stället. Kan ju läggas i ett enda datafält på användaren, om det inte handlar om extremt många, så förhindras den användaren att lägga en ny like. Då behöver kollen bara göras i det ögonblicket, och bara mot en ganska liten lista.

Visa signatur

Moderkort: Gigabyte X570 Aorus Master | CPU: AMD Ryzen R9 5900X | CPU-kylare: Noctua NH-D15 chromax.black | RAM: Corsair Vengeance LPX 64 GB (4x16) DDR4-3600 CL18 | GPU: Gigabyte RTX 4080 Eagle OC | SSD: 2 x Samsung 970 EVO Plus 1 TB NVMe + Kingston A400 480 GB + Samsung QVO860 1 TB | PSU: EVGA SuperNOVA G2 1000 W Gold | Chassi: Lian Li O11 Dynamic XL | Skärm: BenQ PD3200U @ 3840x2160 + ASUS ROG Strix XG32VQ @ 2560x1440 | Tangentbord: Corsair K68 RGB Cherry MX Red | Mus: Logitech MX Master 2S

Permalänk
Medlem

att för en specifik användare kolla om just den har likat en profil med 300.000 likes är i stort sätt det samma som om den hade haft 1 like.
typ med sql

SELECT * from Likes where mac_address = "XXXX:XXXX...." and profile_id = 1231
med index på exempelvis mac_address omgjort till en stor integer så kommer det gå på noll tid.

Permalänk
Medlem
Skrivet av Kasidro:

att för en specifik användare kolla om just den har likat en profil med 300.000 likes är i stort sätt det samma som om den hade haft 1 like.
typ med sql

SELECT * from Likes where mac_address = "XXXX:XXXX...." and profile_id = 1231
med index på exempelvis mac_address omgjort till en stor integer så kommer det gå på noll tid.

haha att jag inte tänkte så.. Så sant!

Tack för alla svar. Gick fan fort att få lite kött på benen!

Sweclockers kan man lite på!

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem

MAC-adresser routas inte över internet. Klienten kan ju själv skvallra om vilken MAC-adress den har i anropet, men det för oss till det andra problemet...

...vad hindrar mig att anropa API:et manuellt med vilken payload jag vill, hur många gånger jag vill? Jag kan fylla din databas med likes givet att jag har tillräckligt lång tid på mig. Lycka till med att skilja mig från legitim aktivitet.

Möjligen kan man hantera det med IP-adresser i stället, men då hindrar man ju å andra sidan likes från olika personer bakom samma NAT (typiska problemet=företagsnätverk).

Räkna inte med att man inte kan knäcka HTTPS om man har tillgång till enheten där anropet körs ifrån. Det blir så klart svårare om du har ett klientcert som du pinnar på servern, men fortfarande inte omöjligt.

Permalänk

redis har en rimlig funktion för det du söker, för en vanlig databas skalar inget vidare för detta

Visa signatur

[5900x][MSI-B550-Tomahawk][RTX-3700][32GBRam3200CL14]

Permalänk
Medlem
Skrivet av KAD:

MAC-adresser routas inte över internet. Klienten kan ju själv skvallra om vilken MAC-adress den har i anropet, men det för oss till det andra problemet...

...vad hindrar mig att anropa API:et manuellt med vilken payload jag vill, hur många gånger jag vill? Jag kan fylla din databas med likes givet att jag har tillräckligt lång tid på mig. Lycka till med att skilja mig från legitim aktivitet.

Möjligen kan man hantera det med IP-adresser i stället, men då hindrar man ju å andra sidan likes från olika personer bakom samma NAT (typiska problemet=företagsnätverk).

Räkna inte med att man inte kan knäcka HTTPS om man har tillgång till enheten där anropet körs ifrån. Det blir så klart svårare om du har ett klientcert som du pinnar på servern, men fortfarande inte omöjligt.

nej, du behöver en secret som endast kan genereras från appen för att kunna exekvera scriptet, så du måste knäcka det först i så fall.

klientcert finns.

Jag är inte orolig för detta, det är inte frågan.

Såklart något man får tänka mer på om det skulle bli något av appen, men annars har jag ett cron job, som kör ett job som kollar sjuk aktivitet & som kommer radera din entry i så fall.

Hursomhelst! Jag är nöjd med svaren! Tack och bock!

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem
Skrivet av KAD:

MAC-adresser routas inte över internet. Klienten kan ju själv skvallra om vilken MAC-adress den har i anropet, men det för oss till det andra problemet...

...vad hindrar mig att anropa API:et manuellt med vilken payload jag vill, hur många gånger jag vill? Jag kan fylla din databas med likes givet att jag har tillräckligt lång tid på mig. Lycka till med att skilja mig från legitim aktivitet.

Möjligen kan man hantera det med IP-adresser i stället, men då hindrar man ju å andra sidan likes från olika personer bakom samma NAT (typiska problemet=företagsnätverk).

Räkna inte med att man inte kan knäcka HTTPS om man har tillgång till enheten där anropet körs ifrån. Det blir så klart svårare om du har ett klientcert som du pinnar på servern, men fortfarande inte omöjligt.

jävligt sent svar, men ang. mac adresser så identifieras och hämtas den genom kodsnutt i appen direkt från telefonen och därefter skickas mot databasen. Finns inget som hindrar mig att göra en sträng som lagrar macadressen & därefter skicka den till databasen .

Handlar inte om routing alls.

Dvs, trycker man på like -> appen hämtar telefonens macadress & kollar om den redan finns i databasen för den profilen. gör den det kan man inte gilla.

Går säkert att knäcka, finns ju personer för allt. Men jag själv ser inte hur man kan göra det på ett rimligt sätt som inte tar miljoner år. Detta kombinerat med en secret som är 24 tecken långt med små & stora bokstäver + konstiga tecken, som måste stämma för att man skall kunna likea.

Jag har faktiskt tänkt på att man inte skall kunna göra det du antar

Visa signatur

[IT-Dept]
Ryzen 1700 OC - 32 - 1070

Permalänk
Medlem

Du får inte lagra macadressen, spara en anonym identifikator istället.

Permalänk
Medlem

Det är trivialt att kalla på metoder från din app oavsett platform. Så man behöver inte ens knäcka något.

https://frida.re/

Håll inte säkerhetsfunktioner för backend på klienten.

Permalänk
Medlem

En hash tabell med signaturhashar generade från info på hårdvaran?

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood