Tips To Prevent Improper Use Of Your ASP Scripts
Click here to signup today!  Don't miss another issue!
01.07.03
Search iEntry News:
Tips To Prevent Improper Use Of Your ASP Scripts
By Wes DeMoney

Introduction

To protect your scripts, files, and databases, you need to ensure that user entered data that your scripts process is legitimate. Users can pass strange data to try and crash your scripts, learn your database username and password, or vandalize your site. This article outlines simple techniques that you can use to prevent malicious users from messing with your ASP scripts.

Build more effective sites by integrating web analytics into your development cycle.

Only NetIQ offers comprehensive solutions for managing, securing and analyzing all key components of your enterprise computing infrastructure—from back-end networks and servers to front-line applications and Web servers.

Request Method

I have seen many cases where programmers cut corners and use the generic Request() method to get their form data or query string data. This is not good for two reasons. One reason, not relating to security, is processing speed. The Request method contains ServerVariables, QueryString, Form, Cookies, and ClientCertificate. If you do not directly specify one, ASP will check ALL of them to see if the variable you are looking for exists.

The security concern here is that users will be able to use the plain old query string to pass form data. You may have a hidden form field that contains secret, script- generated data, and the user can now just pass whatever they want for that data through the query string. Your scripts probably won't even check this data to make sure it is legitimate because you think that your script passed it.

To prevent this problem, use the POST method to submit your forms and use Request.Form() to retrieve your data. If a user tries to access your script without submitting the form, the data returned will be empty:

Form Page

New Email:

Processform.asp

intUID = Request.Form("UID") strNewEmail = Request.Form("Email")

Also, if a specific page is only meant to be access with form data posted to it, you can make sure that this is the case. To do this, check the HTTP header "REQUEST_METHOD". If it's a form POST, then the value should be "POST". Use Request.ServerVariables() to retrieve this header value:

Watch a quick demo on how Peribit's MSR technology can increase the capacity of your

Peribit Sequence Reducers leverage pattern matching techniques used to study DNA to identify and eliminate repetitive data patterns traversing Wide Area Network (WAN) links.

If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then Response.End End If

The code above checks to see if the "REQUEST_METHOD" isn't "POST" and if it isn't, then the script terminates with Response.End.

Check Referer Note that referer is spelt wrong in terms of the dictionary, but seeing as how it is misspelled in the HTTP protocol, which we are using, I will use the misspelled version. Checking the referer is good for pages that accept query string data and form data. Your scripts can check the referer data to make sure that it matches the domain of your site. When taking query string data, you can prevent users from typing in the URL to pass different data, or other sites from making links to pass different data. When taking form data, you can make sure that the form was submitted from your site, not a form someone put on their own web site.

HTTP_REFERER is another HTTP header, just like REQUEST_METHOD, and it can be accessed in the same way. The value returned will either be a full URL, if coming from a link or form post, or nothing, if the user typed in the URL directly.

I wrote the nifty function below that will check the referer and return True if the referer matches the domain the script is on, or False if it doesn't, or if there is no referer at all:

Public Function CheckReferer()

On Error Resume Next Dim strHost, strReferer, blnCheckReferer strHost = Request.ServerVariables("HTTP_HOST") strReferer = Request.ServerVariables("HTTP_REFERER") strReferer = Right(strReferer, Len(strReferer) - (InStr(1, strReferer, "://") + 2)) strReferer = Left(strReferer, InStr(1, strReferer, "/") - 1)

If strReferer = strHost Then blnCheckReferer = True Else blnCheckReferer = False End If

CheckReferer = blnCheckReferer

End Function

Validate Data You need to validate all of the data that has been input by a user, to avoid SQL injection attacks. This seems like a simple idea, but it is where most of your malicious attacks can occur. Make sure data that is supposed to be numeric truly is, and that strings don't contain weird (read: any non alphanumeric) characters. To validate number variables, make sure that they contain a value, that the value is numeric, and if the number is a database ID that it isn't less than 0. If it doesn't meet these conditions, set it as 0 to prevent any problems.

If intID = "" OR IsNumeric(intID) = False OR intID < 0 Then intID = 0 End If

To validate strings, make sure they don't contain specific program statements. If your string will be a filename, make sure that the user doesn't pass path data, such as slashes and dots (ex: "../"), or extensions like "exe". If your string will be executed as a database query, then check that it doesn't contain "--", ";", and possibly the SQL commands like "SELECT", "INSERT"
Also, be sure to escape all single quotes by changing them to two single quotes (''). When retrieved, the two single quotes will be escaped and returned as one.

Finally, for any data that will be retrieved and displayed on a webpage, make sure you HTMLEncode it so that the user can't insert any HTML tags into your site.

strData = Replace(strData, "../", "") strData = Replace(strData, "--", "") strData = Replace(strData, ";", "") strData = Replace(strData, "'", "''") strData = Server.HTMLEncode(strData)

Streamline your sales to beat the competition and increase profitability.
Boost productivity with better forecasting Click to view a FREE Webcast on how you can win with Oracle Sales.

Conclusion

In this article we've looked at some basic ways in which you can reduce the likeliness of users interacting with your scripts in unforeseen ways. Of course, you can only prevent a limited amount of interaction by "patching" your scripts –- IIS is the main culprit of many a worm, virus, or attack, so make sure you use the Windows update feature to keep IIS patched up and secure –- it could end up saving your web site!

Do you have any more tips on how to prevent your scripts from being misused? Visit the forum thread for this article to tell us about them!

About the Author
Wes is one of the minds behind infinetSoftware. InfinetSoftware are the developers of Real Assistant, which is a real-time ASP based live support application.

Many more Java, ASP, PHP, .NET and C++ articles like this one are available at http://www.devarticles.com. If you're in search of free scripts to help make your life as a developer easier, why not checkout http://www.devscripts.com

goEmerchant.com is the Internet's only vertically and horizontally integrated provider of e-commerce solutions targeted to small and medium size businesses as well as the leading provider of e-commerce enabled and transacting web sites on the Internet today.

Click here to signup for WebProASP!

Free Newsletters

Web Developers / Programmers
ColdFusionProNews
CProgrammingTrends
DesignNewz
DevNewz
DevWebPro.
DevWebProAU
DevWebProCA
DevWebProUK
FlashNewz
JavaProNews
MacProNews
TheDevWeb
ThePerlJournal
UnixProNews
WebProASP
XMLProNews

WebmasterFree
Download
Want an easy-to-use email marketing product at an incredibly affordable price?
For more free downloads from WebmasterFree - Click Here

IT Managers/ Decision Makers
CRMProductReview
DatabaseProNews
EnterpriseEcommerce
HiTechEdge
ITcertificationNews
ITmanagementNews
LinuxProNews
NetworkNewz
SecurityProNews
SysAdminNews
WinXPdigest
WirelessProNews
Click here to learn more.  Don't miss out!

Small Business Owners
ActivePro
ClicksToday
EcommerceTrends
EntrepreneurNewz
InsideOffice
NetDummy
promotenews
SearchNewz
SmallBusinessNewz
SohoDay
WebProWire
WindowsDailyNews
WomensBizNews

eBusiness Management
AdvertisingDay
CareerNewz
CRMNewz
EcommNewz
InvestNewz
ManagerNewz
MarketingNewz
NewsletterIndustry
SalesNewz
WebProNews
WebProNewsAU
WebProNewsCA
WebProNewsUK
WebSiteNotes

IT Software
FLADownloads
FreewareToday
LinuxWebmasterFree
MacWebmasterFree
WebmasterFree



-- WebProASP is an iEntry, Inc. ® publication --
© 2003 iEntry, Inc. All Rights Reserved Privacy Policy and Legal
archives | advertising info | news headlines | free newsletters | comments/feedback | submit article