Безопасно ли иметь видимые ключи API Google Диска в Javascript?

#javascript #google-api

Вопрос:

Я использую API Google диска для загрузки файла с Google диска. Для этого я использую Javascript. Безопасно ли иметь видимые ключи API в JS или я должен использовать Node.js или что-то еще? Как вы можете видеть в верхней части кода, существует множество ключей (ключ разработчика, идентификатор клиента и идентификатор приложения). Есть ли какие-либо уязвимые места в моем коде?

Вот мой код:

     var developerKey = '[key]';
    var clientId = "[key]"
    var appId = "[key]";
    var scope = ['https://www.googleapis.com/auth/drive.file', 'https://www.googleapis.com/auth/drive'];

    var pickerApiLoaded = false;
    var driveLoaded = false;
    var oauthToken;

    // Use the Google API Loader script to load the google.picker script.
    function loadPicker() {
      gapi.load('auth', {'callback': onAuthApiLoad});
      gapi.load('picker', {'callback': onPickerApiLoad});
      gapi.load('client', function () {
        gapi.client.load('drive', 'v2', function () {
          driveLoaded = true;
        });
    });
    }

    function onAuthApiLoad() {
      window.gapi.auth.authorize(
          {
            'client_id': clientId,
            'scope': scope,
            'immediate': false
          },
          handleAuthResult);
    }

    function onPickerApiLoad() {
      pickerApiLoaded = true;
      createPicker();
    }

    function handleAuthResult(authResult) {
      if (authResult amp;amp; !authResult.error) {
        oauthToken = authResult.access_token;
        createPicker();
      }
    }

    // Create and render a Picker object for searching images.
    function createPicker() {
      if (pickerApiLoaded amp;amp; oauthToken) {
        var view = new google.picker.View(google.picker.ViewId.DOCS);
        view.setMimeTypes("application/sla,application/vnd.ms-pki.stl,application/x-navistyle");
        var picker = new google.picker.PickerBuilder()
            .enableFeature(google.picker.Feature.NAV_HIDDEN)
            .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
            .setAppId(appId)
            .setOAuthToken(oauthToken)
            .addView(view)
            .addView(new google.picker.DocsUploadView())
            .setDeveloperKey(developerKey)
            .setCallback(pickerCallback)
            .build();
         picker.setVisible(true);
      }
    }

  // A simple callback implementation.
  function pickerCallback(data) {
    if (data.action == google.picker.Action.PICKED) {
      var fileId = data.docs[0].id;
      downloadFile(fileId, data.docs[0].name);
    }
  }

  function downloadFile(fileId, fileName)
  {
    var request = gapi.client.drive.files.get({
      fileId:fileId,
      alt:"media"
    }).then(function(resp){
        $.post("PHP/save_file.php", {Type: "stl", Filename: fileName, Data: resp.body}, function(response) {
          if (response == "OK")
          {

          }
        });
    });
  }

  function showPickerDialog(){
    loadPicker()
  }
 

Комментарии:

1. Возможно, вам захочется проверить справочный центр , чтобы узнать, относится ли ваш вопрос к теме информационной безопасности .

2. Да, вы не хотите, чтобы они были доступны клиенту или даже в вашем репозитории кода. Они подобны паролям.

3. @RaniSharim для клиентских приложений javascript они на самом деле не похожи на пароли. Oauth2 для стороннего сервера больше похож на логин и пароль. Javascript на стороне клиента больше похож на логин без пароля. Пароль вводится, когда он ссылается на источник javascript на сервере. Идентификатор клиента и ключ API в отношении Javascript действительно идентифицируют ваше приложение только для Google.

4. @HereticMonkey я не совсем уверен, что это квалифицируется как дополнительные рекомендации по обеспечению безопасности клиентов сервера аутентификации.

Ответ №1:

Когда вы создавали свое приложение на консоли разработчика Google, вы создали веб-приложение. Когда вы создали его, вы добавили источник javascript. Пока вы устанавливаете этот источник javascript в местоположение вашего веб-сервера, на котором работает приложение, никто не сможет использовать ваш идентификатор клиента. Если вы оставили его установленным на localhost, то да, существует риск того, что кто-то может похитить ваш токен и использовать его.

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

Комментарии:

1. Спасибо. Теперь я использую localhost для тестирования. В будущем я определенно буду устанавливать домен и другие материалы…

2. не забудьте принять ответ, если он вам помог