tags:

views:

1153

answers:

9

Summary of answers:
Don't do it. The legal and financial implications will be disastrous. Look for established third party solutions or hire an expert. Never store any sensitive information on a shared server. Research for the most appropriate encryption mechanism.

I am buiding a website for a customer that needs to store his clients' bank info (routing + account number) in the db for direct deposit. Here are some specifics:

1) The website will initially be on a shared hosting server (this is my first concern).
2) I am using PHP/MySQL.
3) I plan on using mcrypt.
4) The key will be located outside the web root.

Please let me know your thoughts. If possible, please provide me with some resources on ACH processing.

Thanks!

EDIT: I expected such response as I am terrified of security issues out there also. I have expressed my concern to my customer and this will be a good support.

EDIT 2: Will walk away from this. Was not happy with the idea in the first place! Will investigate PayPal's Mass Mailer API.

+9  A: 

1) The website will initially be on a shared hosting server (this is my first concern). --REALLY BAD. Not having absolute administrative control over the server, and be able to keep other people out is a really big problem.

I would be really concerned that you're directly accessing the database from the front end web server. That's a big no-no with financial data.

Even if you have the strongest encryption algorithm ever, what's to prevent someone from hijacking your system and using it to decrypt the data for them. They won't need the key, they'll just need your application to do the work for them. This is assuming you're using a single key to encrypt and decrypt the data or you are retrieving the data from the db to show to the users of the system.

Ok here's the thing. If you have to ask these questions, you don't have the technical expertise to do this correctly. I'm not trying to sound mean, it's just a fact. I would go work with a group of seasoned people who do this professionaly first. There will be a lot of things that aren't mentioned here that will need to be taken into consideration. there' a lot of stuff about security that isn't written down per se. Things that you won't pick up on from reading a book. This is a really hard thing to build, becuase there are big rewards to people who break into financial systems.

Kevin
AMEN!! and so that I have ten characters: AMEN AGAIN!!
Noah Goodrich
+1, very well said.
lpfavreau
+8  A: 

Don't do it.

Bu, if you have to, use public/private key crypto. Store and use only the public key to encrypt the data going into the database. Store the private key in a secure location (meaning: not the hosted server, but a "secure" local machine with appropriate access controls). When necessary, download the data to the local machine, use the private key to decrypt it, and away you go.

But seriously, find a way to avoid doing this if you possibly can.

Andrew Barnett
+2  A: 

For banking info, your server should be in their control not shared.

Also, mcrypt isn't very secure. I know it's built in but I would suggest something that isn't so hackable such as RSA. If someone does get a hold of the information, they shouldn't be able to hack it without a private key.

Paulo
+4  A: 

Talk to a lawyer about your potential liabilities before continuing. Having personal banking data stored on a shared-hosting server has danger written all over it. You have no control over who can ultimately get their hands on the data.

Of additional concern is it's not your customer's data, it's your customer's client's data! You might be able to make an agreement with your customer to indemnify you, but not when their clients are involved. Once data is compromised, they'll turn right back to you with clients breathing down their neck in tow!

lc
+5  A: 

Can you please tell me what this application is so that I can make sure I never use it?

The only way to make this remotely safe is to require the account holder to enter something whenever a banking transaction is performed.

That "something" could be a password, from which a symmetric key is generated to decrypt the account information stored on the server. Or it could be the account information itself. If it's just an account number, it's not much more difficult for the user to enter it every time, and it's a lot safer.

Even then, a corrupt hosting service can easily intercept the account information; an inept hosting service can allow it to be intercepted despite your best efforts. To be safe, you need to lock out of the machine any user that isn't liable for a security breach.

I would trust a reputable hosting service to provide physical security for your server, but I would never trust them with access to the OS. Too risky, whether by malice or negligence.

erickson
Hehehe - I said the same thing. This makes me glad that I cancelled my Mint.com account as well...
Sam Schutte
This is the reason for asking the question. Haven't built it yet. I am terrified of the security issues that are out there and do all the research that I can before doing anything.
pistolshrimp
Fair enough ;) I tried to add some more constructive advice.
erickson
@Overcammed Actually, Mint doesn't store your financial data. They pass it off to the same sort of service PayPal, Amazon, etc. use to keep data secure.
ceejayoz
+1  A: 

I agree with the others - this is a very bad idea.

Dedicated servers can be had for between $79-$99 a month, if that's not affordable, I really would wonder why they're processing bank information to begin with. The preferred way would be to have the database seperate from the web box in this instance as well. Preferably with some firewalls and other protection between them (that is, 2 firewalls, one in front of the web server, and one between the web server and the database).

But anything would be better than using shared hosting. I mean, you can connect right to SQL server and see all the available databases - how easy would it be to jump right in with minimal hacking?

Also, please tell me the name of the site so I never sign up and put my banking info on it!!! :)

Also, make sure you have errors and ommission insurance before going forward with shared hosting.

Sam Schutte
+19  A: 

I think you can solve this problem without storing any bank information yourself through using something like Paypal's Mass Payment API. That way, your client can pay people, and PayPal stores all the information so you don't have to.

If you want to read about all of the steps you need to take to even have a remote possiblity of securing your client's sensitive financial data, google 'PCI Compliance'

If you're not deathly afraid of storing financial data online, you're horribly naive.

Cameron Pope
Oh how I wish I could upvote this more than once: 'If you're not deathly afraid of storing financial data online, you're horribly naive.'
Noah Goodrich
To be fair to the OP - he was not being naive. He was asking it from the tone of the question definitely sounded like he was not really into it.
Tim
Agree with Tim. It sounds like the OP knew it was a bad idea, such a risky thing to do.
Ross
Yeah, looks like the OP was looking for good arguments _against_ doing it. And this was a good answer.
lpfavreau
As the OP is afraid to store financial info online, I'd say he's not horribly naive, at least not in this case. :) I didn't mean to call the OP names, rather to help him, but the truth of my statement stands. :)
Cameron Pope
Guys, I was not offended one bit! I honestly expected such a barrage of answers. I knew the general answer from the beginning. The great thing is getting nuggets of valuable info from within the responses.
pistolshrimp
+1  A: 

You don't have experience in this area, and you can't even find cans of worms this big at a warehouse club. This is a case in which your customer needs to hire a domain expert; if you're interested in doing this kind of work in the future, try to work very closely with the expert and absorb as much knowledge as you can.

Adam Jaskiewicz
A: 

I think everybody here has announced their distaste of the situation enough, so I will just drop a hint on another problem when doing any kind of crypto (which we will agree is necessary):

The data has to be encrypted somewhere!

If you do it on the server, well a compromised server will just do your encryption and pass them on w/o encrypting them.

If you do it on the client, this is a bit more secure, but still leaves the door wide open if someone has access to your server: They can in theory simply open a XSS hole (i.e. insert a remote script into your page...) that sends a copy to their box before encrypting...

In the end: If you really consider doing this on a server that might not be 110% secure, WALK AWAY.

dionadar