View Single Post
  #448  
Old 09-22-2002, 12:06 AM
futureal futureal is offline
 
Join Date: Feb 2002
Location: Del Mar, CA, USA
Posts: 556
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally posted by Ian
All these games can be easily hacked by memory editing. I don't know how to fix this, just pointing it out.
As far as I know, any Flash movie can be edited in this manner. Flash security is very, very limited. There are ongoing discussions and "challenges" on FlashKit (www.flashkit.com) regarding security.

The only thing I can think of that word be worth doing to prevent cheating is recording a user's "time of entry" onto the game page and then his/her "time of entry" onto the score page. Using the scoreboard editor, an adiministrator could easily see when a user is fooling the system -- e.g. a score of 1+ million in Tetris requires, what, 30 minutes of playing?

Really though, there is no foolproof method here. Anybody who knows how to hexedit can probably find a way to beat the system, but I am not too worried about it. I watch for things like new accounts immediately getting the highest score, and users having played once or twice and getting the highest score.

As always, I am open to suggestions on this matter if anybody has them. Security is a big issue here, but unfortunately Flash/PHP interaction is inherently insecure.

edit: This also addresses PlurPlanet's problem/question. I think that after reading this stuff, I may work on implementing my idea above. It would add yet another table and a few extra queries but it sounds like it would be worth it. In general terms, here is how this would work:
  • When a user goes to a "Play" page, an entry is recorded in the security table showing the user's ID, the game's ID, and the current server time.
  • When a user goes to a "Game Over" page, the security table is checked for the user's most recent open entry for that game, and the entry is "closed" by updating the record with the gameover time.
  • Each time a user goes to a "Play" page, the database checks to see if there is an "open" entry for that user and game; if there is, it is replaced, otherwise a new one is created

This would add 2-3 queries to the play page (the DELETE would not always occur) and 2 queries to the gameover page, as well as a fifth table to the arcade. The advantage is that it is completely server-side, so a user will not be able to fool it. The disadvantage is that a clever user could still fool the system if he/she knows how it works. However, it should make it a lot easier to spot.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01308 seconds
  • Memory Usage 1,768KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_quote
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete