Как защитить данные в мобильном приложении HTML5 + PhoneGap? - PullRequest
6 голосов
/ 02 мая 2011

Можно ли защитить базу данных sqlite внутри мобильного приложения, созданного с помощью PhoneGap + HTML5?У меня есть большой кусок данных, которые я хотел бы защитить.Но из-за природы используемых технологий это кажется мне практически невозможным.Если невозможно защитить данные, возможно ли по крайней мере использовать какое-то запутывание, чтобы отговорить «сценаристов» не пытаться легко получить данные?

Ответы [ 3 ]

1 голос
/ 02 мая 2011

Пользователь вашего программного обеспечения имеет больше прав на управление базой данных sqlite, чем вы. Ваше программное обеспечение просто посетитель на его машине . Любая форма шифрования будет безопасна, хотя неясна , потому что вы не можете иметь секретный (или секретный ключ) на устройстве.

Если вы хотите защитить базу данных, вы должны разместить ее. Я рекомендую настроить интерфейс RESTful, чтобы js на мобильном устройстве могла выполнять действия с данными. Вы должны предположить, что злоумышленник имеет 100% доступ к этому интерфейсу RESTful. Никогда не выставляйте такую ​​функцию, как do_query("select ...");. Убедитесь, что вы принимаете sql инъекцию во внимание.

1 голос
/ 02 мая 2011

Одна вещь, которую вы можете сделать, это зашифровать данные при их поступлении в базу данных, а затем расшифровать их, когда они вернутся.Чтобы сделать это полуобслуживаемым способом, вам понадобится какой-то слой доступа к БД, где может происходить шифрование / дешифрование, чтобы вашему основному приложению не приходилось беспокоиться об этом.

Я неособенно хорошо разбирается в PhoneGap, так что я не уверен, есть ли какие-либо плагины, которые делают это.Но, если вы не возражаете против проблем шифрования / дешифрования, связанных с кодом вашего приложения, вы можете просто передать все через функцию encrypt(myData) по пути в БД, а затем через функцию decrypt(myData) по дорогеиз.Это будет работать очень хорошо, если вы собираетесь заходить в / из БД только в нескольких местах.

Это довольно тяжелое решение, но, как вы сказали, варианты довольно ограничены.

Наконец, я бы предложил использовать идентификатор устройства (если вы можете его получить) или какой-то другой способ получения ключа шифрования для каждой учетной записи или для каждого устройства, чтобы каждое устройство было сложнее взломать, а не всеустройства, использующие один и тот же ключ.Хорошими вариантами могут быть хеш имени пользователя или соленого имени пользователя, или хеш пароля соленого хэша пароля.

0 голосов
/ 23 мая 2012

Вы также можете зашифровать свои данные с помощью JSAES: AES в JavaScript , но тогда вам понадобится какой-то механизм управления ключами с вашим сервером / пользователем.

...