Results 1 to 2 of 2

Thread: Why do we sanitize besides preventing injection?

  1. #1
    Join Date
    Dec 2006

    Why do we sanitize besides preventing injection?

    Hey everyone, today is a sad day for my php ego.

    I had built this awesome sanitizing thing that would get data from $_GET or $_POST, strip tags, replace any outrageous characters with an underscore, and then replace anything left (besides letters, numbers, and spaces) with a left brace, ascii code, then right brace. So:
    ¿my name's Khelavaster?
    ...would become:
    _my name{39}s Khelavaster{63}

    Which is safe for inserting into a database. And then when I eventually display it again, I can decode it back to: "_my name's Khelavaster?"

    I thought it was pretty cool.

    But now I hear about this newfangled contraption called mysqli! It makes it so I don't have to worry about SQL injections? But that's the only reason I made my sanitizing thing!

    So I need to know if there's any other reason to sanitize user input than preventing SQL injections. If there isn't, then I'll move on, delete my sanitizing code, and use mysqli like god apparently intended. If there is, then I'll keep my sanitizing scheme and use mysqli too.

    The question is, why do we sanitize user input if mysqli takes care of preventing SQL injections for us?

    (Also, criticism on my sanitizing thing is welcome--I know there's better ways to do it out there)

  2. #2
    Join Date
    Aug 2004
    As far as the database is concerned, things like HTML tags and special characters are of no concern. The only things of concern are a handful of specific characters that can have a negative effect on your SQL, such as quotes or semi-colons. With the MySQL interface, mysql_real_escape_string() takes care of that issue, and it is therefore the only thing you need to do to prevent SQL injection issues. With MySQLi, you have the same sort of escaping function, or you can instead use bound input parameters in conjunction with prepared statements (which then does the same sort of escaping automatically where needed).

    Things like strip_tags(), htmlentities(), not allowing certain characters, etc. has nothing to do with SQL injection. They have to do with any validation you want to do with regards to what sort of data you want to allow the user to enter, or with filtering and/or escaping of output from the application to the client (browser).

    I therefore recommend keeping such validation/filtering/escaping issues separate from the specific escaping done to prevent SQL injection, since if you combine them then you are combining the application's business logic needs with the separate database interface needs, and you may not always want them linked arm-in-arm like that.
    "Well done....Consciousness to sarcasm in five seconds!" ~ Terry Pratchett, Night Watch

    How to Ask Questions the Smart Way (not affiliated with this site, but well worth reading)

    My Blog
    cwrBlog: simple, no-database PHP blogging framework

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



X vBulletin 4.2.2 Debug Information

  • Page Generation 0.11261 seconds
  • Memory Usage 2,839KB
  • Queries Executed 15 (?)
More Information
Template Usage (32):
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (2)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (2)postbit
  • (2)postbit_onlinestatus
  • (2)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (71):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates