web security never, ever, trust user inputs supankar

40
Web Security Never, ever, trust user inputs Supankar

Upload: ramiro-patchin

Post on 28-Mar-2015

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Web Security Never, ever, trust user inputs Supankar

Web Security

Never, ever, trust user inputs

Supankar

Page 2: Web Security Never, ever, trust user inputs Supankar

What is Security?

Page 3: Web Security Never, ever, trust user inputs Supankar
Page 4: Web Security Never, ever, trust user inputs Supankar

why does security needs?

Haha! Yes I know it. Its really a funny topic!!

Page 5: Web Security Never, ever, trust user inputs Supankar
Page 6: Web Security Never, ever, trust user inputs Supankar

Is it call security?

Page 7: Web Security Never, ever, trust user inputs Supankar

Security why?

• To prevent stealing important data• To secure Personal Data / Credentials• Compromising Access Privilege• No Data Loss

Page 8: Web Security Never, ever, trust user inputs Supankar

Common Threats

• Cross-Site Scripting (XSS)• Session Hijack• Click Jacking• Cross-site request forgery (XSRF)• SQL Injection

Page 9: Web Security Never, ever, trust user inputs Supankar

Never, ever, trust user inputs

Page 10: Web Security Never, ever, trust user inputs Supankar

Input Validation

• Always use server side validation as client side (javascript) validation can easily be bypassed

• Use white-listed values• Use built-in escape functions• Validate for correct data types, like numbers

Page 11: Web Security Never, ever, trust user inputs Supankar

example

• supankar<script type="text/javascript" src="http://abcNews24.com/gps/malicious.js"></script>

Page 12: Web Security Never, ever, trust user inputs Supankar

Input Validation (Cont..)

• Don’t expect the return value from selections, radio buttons or check boxes of a form to be the ones you mentioned. So, always revalidate.

• Example:<input type="radio" name="gender" value="m"

/>Male<input type="radio" name="gender" value="f"

/>Female

Page 13: Web Security Never, ever, trust user inputs Supankar

Input Validation (Cont..)

• insert userinfo (gender) values($_POST[‘gender’])

• Garbage <input type="radio" name="gender" value=“a"

/>Male<input type="radio" name="gender" value=“c"

/>Female

Page 14: Web Security Never, ever, trust user inputs Supankar

Input Validation (Cont..)

• Defensive Programming:

$gender=‘m’;If ($_POST[‘gender’]==‘f’)

$gender=‘f’;

Page 15: Web Security Never, ever, trust user inputs Supankar

PHP: Some Bad FeaturesRegister Globals Consider the following code -

if ($password == "my_password") { $authorized = 1;

} if ($authorized == 1) {

echo "Lots of important stuff."; }

test.php?authorized=1 will produce “Lots of important stuff.” To disable register_globals using .htaccess file – php_flag register_globals 0 To disable register_globals using php.ini – register_globals = Off

Magic Quotes

Page 16: Web Security Never, ever, trust user inputs Supankar

PHP harmful functions

eval("shell_exec(\"rm -rf {$_SERVER['DOCUMENT_ROOT']}\");");

ini_set(), exec(),fopen(), popen(), passthru(), readfile(), file(), shell_exec() , system(),etc…

Page 17: Web Security Never, ever, trust user inputs Supankar

SQL InjectionMost common and most destructive security hazardLets see the common way to check username and password entered into a form – $check = mysql_query("SELECT Username, Password, UserLevel FROM Users WHERE Username = '".$_POST['username']."' and Password = '".$_POST['password']."'");

If we enter the following in the “username” input box and submit -' OR 1=1 #

The query that is going to be executed will now look like this –SELECT Username, Password FROM Users WHERE Username = '' OR 1=1 #' and Password = ''

As you can see, this query will return all the users from the database and as generally first user on a user table is the admin, the hacker will easily gain admin privilege.

Page 18: Web Security Never, ever, trust user inputs Supankar

SQL Injection - Preventing

• Sanitize Properly• User Prepared Statements• Use mysql_real_escape_string()• Turn on magic_quote_gpc with Caution

Page 19: Web Security Never, ever, trust user inputs Supankar

Error/warring Message

Page 20: Web Security Never, ever, trust user inputs Supankar

File ManipulationSome sites currently running on the web today have URLs that

look like this:index.php?page=contactus.html

The user can very easily change the "contactus.html" bit to anything they like. For example,index.php?page=.htpasswd

By changing the URL, on some systems, to reference a file on another server, they could even run PHP that they have written on your site.

When users download a file from your server, if the file name depends on user input, he can easily manipulate it to download system files by giving inputs like – “../../../etc/passwd”

Page 21: Web Security Never, ever, trust user inputs Supankar

• IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*

• ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); error_reporting(E_ALL);

Page 22: Web Security Never, ever, trust user inputs Supankar

JavaScript!!!

• A creative innovation.

Giving the user more control over the browser Detecting the user's browser, OS, screen size, etc. Performing simple computations on the client side Validating the user's input Handling dates and time Generating HTML pages on-the-fly without

accessing the Web server.

Page 23: Web Security Never, ever, trust user inputs Supankar

Cross-Site Scripting (XSS)

• It allows attackers to add keyloggers, tracking scripts or porn banners on your site, or just stop your site working altogether.

• It can also used for cookie hijacking so that a real user can be faked.

• Always use htmlentities() function to output user-generated texts.

• Limit the character set that can used for a particular text type

• Disallow HTML input if possible. If that is not an option, only allow limited HTML tags

Page 24: Web Security Never, ever, trust user inputs Supankar

I am not Sleeping…….

Page 25: Web Security Never, ever, trust user inputs Supankar

Yes, I am, because it is boring..

Page 26: Web Security Never, ever, trust user inputs Supankar

Lets have some fun…

Page 27: Web Security Never, ever, trust user inputs Supankar

Fun…

• Go to supankar.wordpress.com• http://technotip.com/269/moving-image-

javascript-small-fun-application/Develop

Page 28: Web Security Never, ever, trust user inputs Supankar

XSS – Preventing

• Sanitize User input properly• Check Character Encoding• Double check before printing GET values fromURL

Page 29: Web Security Never, ever, trust user inputs Supankar

MVC? Is it secure?

Page 30: Web Security Never, ever, trust user inputs Supankar

Cross-site request forgery(XSRF)

• Using user’s logged in session to manipulate• http://example.com/admin/delete/post/1

Page 31: Web Security Never, ever, trust user inputs Supankar

Cross-site request forgery(XSRF) cont..

• User A has a post with ID 112

Page 32: Web Security Never, ever, trust user inputs Supankar

Cross-site request forgery(XSRF) cont..

• User B Posted on his blog <img src=‘/admin/delete/post/112’/>• No Effect for User B

Page 33: Web Security Never, ever, trust user inputs Supankar

Cross-site request forgery(XSRF) cont..

• User A visits User B’s blog• <img src=‘/admin/delete/post/112’/>• Delete’s User A’s post with ID 112

Page 34: Web Security Never, ever, trust user inputs Supankar

XSRF Prevention

• Use POST• Check for the presence of some sort of valid

submission

Page 35: Web Security Never, ever, trust user inputs Supankar

I have more important tasks please leave me now…

Page 36: Web Security Never, ever, trust user inputs Supankar

Ok, Ok, Just Summery

• Use common sense• Always check user input• No direct user input at sql query• Disable the error/warring messages at the

production time• Always try to use defensive programming

technique• Update your scripts to the latest versions

Page 37: Web Security Never, ever, trust user inputs Supankar

Suggestions

• Read security related news and updateso http://www.owasp.org/o http://shiflett.org/o http://www.securityfocus.com/

Page 38: Web Security Never, ever, trust user inputs Supankar

Toooo much, Supankar!! STOP NOW!!

Page 39: Web Security Never, ever, trust user inputs Supankar

<?php echo “Question”;?>

Page 40: Web Security Never, ever, trust user inputs Supankar

• An ounce of prevention is worth a pound of cure -> Benjamin Franklin

Thanks