CANDID: Dynamic candidate evaluations for automatic prevention of SQL injection attacks

Prithvi Bisht, P. Madhusudan, V. N. Venkatakrishnan

Research output: Contribution to journalArticlepeer-review


SQL injection attacks are one of the top-most threats for applications written for the Web. These attacks are launched through specially crafted user inputs, on Web applications that use low-level string operations to construct SQL queries. In this work, we exhibit a novel and powerful scheme for automatically transforming Web applications to render them safe against all SQL injection attacks. A characteristic diagnostic feature of SQL injection attacks is that they change the intended structure of queries issued. Our technique for detecting SQL injection is to dynamically mine the programmer-intended query structure on any input, and detect attacks by comparing it against the structure of the actual query issued. We propose a simple and novel mechanism, called Candid, for mining programmer intended queries by dynamically evaluating runs over benign candidate inputs. This mechanism is theoretically well founded and is based on inferring intended queries by considering the symbolic query computed on a program run. Our approach has been implemented in a tool called Candid that retrofits Web applications written in Java to defend them against SQL injection attacks. We have also implemented Candid by modifying a Java Virtual Machine, which safeguards applications without requiring retrofitting. We report extensive experimental results that show that our approach performs remarkably well in practice.

Original languageEnglish (US)
Article number14
JournalACM Transactions on Information and System Security
Issue number2
StatePublished - Feb 1 2010


  • Dynamic monitoring
  • Retrofitting code
  • SQL injection attacks
  • Symbolic evaluation

ASJC Scopus subject areas

  • Computer Science(all)
  • Safety, Risk, Reliability and Quality


Dive into the research topics of 'CANDID: Dynamic candidate evaluations for automatic prevention of SQL injection attacks'. Together they form a unique fingerprint.

Cite this