How do i make $_GET more secure.?

前端 未结 3 1461
醉话见心
醉话见心 2021-01-20 23:28

I am using the get method to perform some operation like, approve, markasspam, delete, for commenting system. i know it is highly insecure to go this way but i cannot help it ou

3条回答
  •  余生分开走
    2021-01-21 00:19

    Whether you use GET or POST parameters here doesn't matter much in this context - what the script needs first is some sort of authentication. (After that is done, you can go into security details where GET is slightly less secure than POST - see the comments for details.)

    I'd say you have two options:

    • Protecting the entire script using .htaccess - no changes needed to the script itself

    • Introducing PHP side user authentication and perform the operations only if a logged in user makes the request. Needs fundamental changes to the script but is most flexible.

    Re your edit:

    It turns out your script is already protected. In that case I assume you are uncomfortable with incremental ID numbers turning up in the URLs, getting cached in the browser etc. etc. The usual solution to that is to generate a random key for each comment when it is created (in addition to the incremental ID). That key gets stored in a separate column (don't forget to add an index) and you'd match against that.

    A step even further would be to create temporary hashes for every action, which is the ultimate protection against a number of outside attacks.

    Re your edit about using one-time hashes:

    I've never implemented one-time hashes in an admin interface yet so I have no experience with this, but I imagine that a very simple implementation would store action hashes in a separate table with the columns hash, record and action. Whenever your tool lists a number of records and outputs "delete / approve / unapprove" links, it would generate three record in the hash table for each comment: One for delete, one for approve, one for unapprove. The "delete / approve /unapprove" links would then, instead of the record ID and command, get the correct hash as the only parameter.

    Add a time-out function for unused hashes (plus delete any hashes that were actually used) and you're done.

提交回复
热议问题