Microsoft killed FoxPro in 2007. Anyway, here's FoxPro revived
Thread
Unofficial Hacker News client; not affiliated with Y Combinator.
Microsoft killed FoxPro in 2007. Anyway, here's FoxPro revived
Unofficial Hacker News client; not affiliated with Y Combinator.
mikestew · · focus · HN ↗
My recommendation is to get rid of the DBF/DBC files and move to a SQL DB of some flavor ASAP. If you have the source code, use ODBC or OLE DB to point to a server.
Source: filed that bug over 20 years ago when I worked on the Fox team. No, it wasn’t going to get fixed without rewriting large parts of how the DB engine worked.
HoldOnAMinute · · focus · HN ↗
EvanAnderson · · focus · HN ↗
fodkodrasz · · focus · HN ↗
cm2187 · · focus · HN ↗
But if it starts being a system of records / authoritative system, there needs to be a plan to decommission it.
EvanAnderson · · focus · HN ↗
Recently it had TOTP 'MFA' added to comply with a Secretary of State mandate.
Anyone who uses the software can just open the database files directly. They're just DBF files in a shared folder on a file server. All the users have to have read/write access to the files or the application won't work.
I hang my head.
marcus9999 · · focus · HN ↗
monster_truck · · focus · HN ↗
There's still so much software out there that is an absolute lynchpin to a business that will never have the kind of durability/compatability many take for granted. The only thing that has changed in the past 2 decades is the operating system running the VM. In 2026 they are still yelling across the office or exchanging phone calls when one has finished and signed out so that the other can sign in and pull the updates.
It often isn't taken seriously or is written off because it's a "small business", but those 2-8 people run a book of business that clears this comment thread's lifetime earnings annually.
pbhjpbhj · · focus · HN ↗
boredjohnny · · focus · HN ↗
mikestew · · focus · HN ↗
EDIT: sorry, I originally just skimmed your comment. I was unclear in my original comment: the files can be accessed and “hacked” from the file system with a text editor. (And a bunch of deleted stuff because I misread your comment.)
[deleted] · · focus · HN ↗
[deleted]
userbinator · · focus · HN ↗
If you already have full access by design, then there's no "huge security hole" either.
EvanAnderson · · focus · HN ↗
It seems like many people have a hard time understanding this, including developers.
Any attempt to add any kind of permissions, security, etc, without addressing the nature of the architecture (that the database engine runs in the same address space / security context as the UI) misses the point.
shermantanktop · · focus · HN ↗
But the filesystem access to read/write the db files creates a path to bypass half of that application.
Does the application checksum the db file and have any resistance to filesystem tampering? That'd be trivial to beat, I’m sure, but it’d be something.
aforwardslash · · focus · HN ↗
I can change the behaviour of many/most applications by just having read/write access to files; Can you give me examples of mainstream applications that are resistant to filesystem tampering when eg.you have install access? Maybe I'm missing something.
lelanthran · · focus · HN ↗
Is there any local/native application for which this is not true?
shermantanktop · · focus · HN ↗
I’m not a FoxPro user and so maybe these are single-user/single-host installs, where the user can only destroy their own data, and permissions are a pretend feature. In which case, carry on.
306bobby · · focus · HN ↗
EvanAnderson · · focus · HN ↗
The rub here is that FoxPro is an in-process database engine and accesses its data files with the security context of the user running the application. It doesn't have separation between the database engine and the UI like a client/server database would. Think of it like SQLite or BerkeleyDB.
Architecturally users who use the application need full read/write access to all the data files for FoxPro to work.
lelanthran · · focus · HN ↗
There's different needs for a permissions system.
You're thinking of it as "lock to the main entrance of a maximum security prison". Think of it more as a lock on a bedroom door: it's not there to withstand a SWAT assault, it's there to keep people from accidentally walking in.
All local applications (which were all applications in the era we are talking about) with permissions were sold to companies on the understanding that there was no real security.
Hell, even the networked products at the time had no real security :-/
Towaway69 · · focus · HN ↗
Trust was a thing back then. Spam was something that came out of a tin and was made of dead animal. And passwords were limited to eight ASCII characters.
And as such, bolting security onto something that was designed inherently to be security agnostic is going to be a recipe for failure.
antonvs · · focus · HN ↗
mikestew · · focus · HN ↗
No, it wasn't. The reason I even raised this bug to begin with was not because of some nefarious $BAD_COUNTRY hacker getting yer dataz from far away, it's because you have to worry about your own users first. I'd guess that any consultant doing the kind of work FoxPro excelled at (LOB apps) has found some clever boy or girl who discovered they can poke at DBF files directly. Long before internet connectivity was common, one still had to worry about your own coworkers futzing things up.
mikestew · · focus · HN ↗
dspillett · · focus · HN ↗
A significant weakness?
A serious limitation for modern uses / in modern environments?
kennywinker · · focus · HN ↗
cestith · · focus · HN ↗
Shorel · · focus · HN ↗
It is top 6 in their vulnerabilities ranking.
This is definitely insecure design.
alper · · focus · HN ↗
It ships database files over the network and does that blazingly fast.
chasil · · focus · HN ↗
I don't know if dBASE variants support bind variables. That isolation is really required to avoid the "Bobby Tables" effect.
<a href="https://bobby-tables.com/" rel="nofollow">https://bobby-tables.com/
I'd prefer to see the dBASE language adapted to run on SQLite files, as they are a far more profound standard.
Arainach · · focus · HN ↗
chasil · · focus · HN ↗
The permissions exploits on SQLite and dBASE are identical, sad to say.
You're a good guy. I respect you.
vidarh · · focus · HN ↗
That's the problem here: Systems built on sharing the database over a networked filesystem, where one user can not just modify all the data, but can also execute code on all users machines.
ransom1538 · · focus · HN ↗
SigmundA · · focus · HN ↗
When there was application error the source code would pop up in dialog maybe a some sort of debugger and the end users would just type a bunch of crap in trying to get out of it and hit enter and save the changes and corrupt the app for everyone and it would have to be restored from backup.
Pretty sure it was Foxpro or maybe dbase, definitely wasn't MS Access as it was still a dos based client.
Very different idea about app security back then, was really nice to developed the db, GUI front end and printable reports all in single runtime though.
mamcx · · focus · HN ↗
And then it moves to the orthogonal problem:
> SQL DB
(that in fact means: An app made for end users that are not trusted by default but really are somehow that is a improper implementation of the relational model and more improper developer platform, more like wordpress, and because is mostly deployed "networked" suddenly need to worry about remote access, that is totally not the main point of old Fox/dbase apps!)
And the funny things: SQL injection is not a problem with a Fox app (use of a stringy api is a MAJOR issue that lack of a permission model)
---
As one that have long experience with FoxPro and try to revive the style, lets go to the core of the problem:
Imagine you say to a C developer:
"You can't use `fopen` and other filesystem APIs, because well you have access to to the whole filesystem"
Or even better, the user!:
"You should not own your own filesystem!"
The DB is like the filesystem, but not that dumb!
The permissions model is orthogonal. Maybe you (normal) filesystem is running on a networked deployment with access by spies with and other personal that should have top-notch security.
Or is just a embedded device.
WHAT DECIDE THE SECURITY MODEl?
The kind of storage?
Nope!
Is the deployment and use case.
Similarly, what decide the security of a database?, the fact is a "database"?
No!, that is ridiculous. If you need to layer some kind of access control or whatever, is outside of the kind of storage you choses.
In fact, see how Wonderfully could be all if the "filesystem" where an actual database and you can run relational queries on top: Millions of "cli utilities" suddenly are unnecessary, the user (and developers!) have more freedom and control, and your big corp with byzantine rules will be even more happy.
----
P.D: I'm very well aware of the limitations of Fox, is ancient software! but the style of programming? Is like have a taste of start trek
P.D.2: And note that the vector attack described here is a fault of the dumb filesystem, actually!
j45 · · focus · HN ↗
Maybe there's a way to run them more securely with a wrapper.
It does make sense to try and move to a sql db of some type, and my immediate thought is if something like Postgres, with a plugin or extension or two couldn't simulate enough of Foxpro.
That, or rewriting large parts of the DB engine seem readily much more possible now with LLM driven development.
merb · · focus · HN ↗
bluebxrry · · focus · HN ↗
Perfect. I'm looking for a program that executes everything it reads. You've tracked a 20-year-old security bug for FoxPro? That's gnarly. What if, instead of reviving FoxPro, we summon a new type of DOS with no security model to begin with? FoxPro was always better that way.
Hear me out. So, you have your regular computer on your desk, right? I call that the REAL SECURITY computer for REAL WORK: You know, your typical choice of Windows 11, Apple, or Linux. The biggest names in security. The names we trust. Real work. Real computers. Real security.
Next to it sits FoxPro, running new DOS on a separate computer with no security model at all.
Here's the ergonomics. You press your hands against your desk and push your office chair off like a boat, gliding away from the SECURE COMPUTER in the REAL WORLD toward FoxPro. FoxPro reads everything and executes with religious zeal.
- written from my treadmill. edit: fix typos
KenPainter · · focus · HN ↗
Foxpro's local DB handling was amazing at pulling down tables, doing complex bulk operations, and pushing the changes. Data transfer was fast, coding ergonomics were great. On top of the extremely low-cost UI creation, it was a no-brainer.
But expectations were changing, everybody wanted to run it everywhere. Citrix bought some time, but the writing was on the wall.