0
\$\begingroup\$

We're working on an app that registers the gasoline price at a gas station. We enter that information through digital pictures our clients send us; for example, Bob sent us a picture taken today from his iphone saying that the Shell at Jefferson Street is selling regular gas at $2.20 so we enter that information in the app.

We're having two issues:

  1. some of the pictures we receive aren't from today although they say it is

  2. some users take a screenshot of an old picture and send it to us saying that it was taken today.

From what I've read, with the EXIF data, we can check if the digital picture was taken today. But if the image they send us is an iphone or android screenshot of an old picture, would that affect the EXIF data?

I guess my question is: Is there a way to check if the picture was taken today and/or it was a screenshot of an old photo?

Thanks.

\$\endgroup\$
7
  • 3
    \$\begingroup\$ That's why the old Hollywood movies had them photograph the kidnap victim holding today's newspaper. \$\endgroup\$
    – Tetsujin
    Jan 16, 2019 at 16:43
  • 6
    \$\begingroup\$ If it's a mobile platform app, why not just have the app take the picture and send it immediately? \$\endgroup\$
    – Blrfl
    Jan 16, 2019 at 16:52
  • \$\begingroup\$ @Blrfl Then, if someone wants to cheat, they can simply print out an old picture and take a picture of the printout. It won't solve the problem. \$\endgroup\$
    – jarnbjo
    Jan 16, 2019 at 17:26
  • 1
    \$\begingroup\$ Reprographing a print so well that it isn't detectable is pretty darned hard..... \$\endgroup\$ Jan 16, 2019 at 19:04
  • \$\begingroup\$ @Blrfl, Thanks. For some reason, I hadn't thought of that alternative. That's really the best alternative. \$\endgroup\$ Jan 16, 2019 at 19:24

4 Answers 4

5
\$\begingroup\$

No, there is no way. This just isn't possible. There's no unalterable data that you can check.

Why are people sending you false information? I'd work on checking your incentives, and make it easy to identify patterns of false reports.

\$\endgroup\$
5
  • 1
    \$\begingroup\$ Exactly right. Garbage-in-garbage-out. Since this is an app, I'd just enforce it by having the picture taken from within the app, and not allow sending from a device's photo library. That at least solves the regency problem. Still can prevent sending poor images, or images of the wrong subject. But it won't be dated or altered if done from within the app. \$\endgroup\$
    – scottbb
    Jan 16, 2019 at 17:20
  • \$\begingroup\$ @scottbb Then, if someone wants to cheat, they can simply print out an old picture and take a picture of the printout. It won't solve the problem \$\endgroup\$
    – jarnbjo
    Jan 16, 2019 at 17:27
  • \$\begingroup\$ You can still take a picture of a printed picture... but that requires some dedication and care (tripod, etc...) because if the picture is hand-held there will be perspective distortions, but these wouldn't be the same as the ones you would get in a real 3D scene.. \$\endgroup\$
    – xenoid
    Jan 16, 2019 at 17:27
  • \$\begingroup\$ ^^^ derp. Meant to say, it solves the recency problem, not regency. As far as thwarting dedicated bad actors... you might build a better mousetrap, but nature will build a better mouse. \$\endgroup\$
    – scottbb
    Jan 16, 2019 at 17:52
  • \$\begingroup\$ @scottbb, thanks for the suggestion. Hadn't thought of that. \$\endgroup\$ Jan 16, 2019 at 18:23
2
\$\begingroup\$

Screenshots from my smartphone:

  • have no Exif data
  • are much smaller than pictures (2Mpix vs 12Mpx from the camera)
  • have the wrong aspect ratio (16/9 instead of 4/3 from camera shots)

So it should be easy to detect the quick hacks. Nothing can be done against explicit tampering with the Exif data (or against good image editing).

\$\endgroup\$
0
\$\begingroup\$

You can check the Exif data in the image file (if it still exists) to check when the photo was taken...but this can easily by modified by someone if they want.

There is no way to be certain that a photo was taken today.

\$\endgroup\$
3
  • \$\begingroup\$ You can be pretty sure it wasn't taken in the future though :-P \$\endgroup\$
    – osullic
    Jan 16, 2019 at 16:07
  • 1
    \$\begingroup\$ What does the Exif data for a screenshot look like? \$\endgroup\$ Jan 16, 2019 at 16:21
  • 1
    \$\begingroup\$ @fdkgfosfskjdlsjdlkfsf I don't know. I would guess that a screenshot doesn't contain any Exif data, but that's just a guess, and it may depend on what application created the screenshot. You need to investigate. \$\endgroup\$
    – osullic
    Jan 16, 2019 at 16:34
0
\$\begingroup\$

If a printout or physical screen has been reprographed, this should leave some visible artifacts once you look at the picture at high magnification.

A screenshot app might leave some (falsifiable) clues in the EXIF, eg impossible aperture/speed values for a given phone.

Spot check for such things, and announce that you will disincentivize such behaviour in whatever way is effective in the social context of your application. If you find too few breaking the rules, randomly disincentivize/name&shame a few legit but unimportant users just to keep everyone on their toes ;)

The best method, but probably too cumbersome, would be to require your users to include a hint that you only give them when they are about to register a picture. Eg number of fingers to hold up (too easily brute forced on its own!), and in which direction to point the hand. Alternatively, a random password they have to write on a piece of paper and include in the photo. Again, disincentivize anyone caught trying to photoshop it in.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.