"شيفرة CSRF سيئة" عند تنفيذ PUT باستخدام API و curl و PHP

لديّ دالة بسيطة جدًا “من المفترض” أن تعمل، لكنها لا تعمل لسبب ما. هل يمكن لأحد مساعدتي في فهم ما نفعله خطأ؟

نحصل باستمرار على خطأ “BAD CSRF”.

public function changeName()
{
  $url = 'https://www.website.com/{username}.json';
  $data = ['name' => 'James', 'api_key' => DISCOURSE_API, 'api_username' => 'system'];

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:multipart/form-data'));
  curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));

  echo $response = curl_exec($ch);

  if (!$response)
  {
      return false;
  }

}

بالمناسبة، لقد جربت بالفعل نقل api_key و api_username إلى الرابط أعلاه كـ GET لكن لم يتغير شيء.

يجب عليك وضع قيم Api-Key و Api-Username في رأس الطلب. يوجد مثال باستخدام curl في نهاية هذا الموضوع قد يكون مفيدًا: Sync DiscourseConnect user data with the sync_sso route.

شكرًا جزيلاً! لقد نجح الأمر.

ولأي شخص آخر يعاني من نفس المشكلة:

$url = 'https://www.website.com/{username}.json';
$data = ['name' => 'George'];
$api_key = CUSTOM_DISCOURSE_API;

$headers = array("Content-Type: multipart/form-data;", "Api-Key: $api_key", "Api-Username: system");


$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

$result = curl_exec($ch);

if (curl_errno($ch) !== 0) {
   // التعامل مع الخطأ، استدعاء curl_close($ch) ثم الإرجاع.
}

curl_close($ch);

$discourse_user = json_decode($result);

فقط لإضافة ذلك، إذا كان هناك شخص يحتاج إلى تحديث “user_field”، فاستبدل $data بهذا:

$data = ['user_fields' => ['1' => 'Something']];

الرقم “1” هو أول user_field قمت بإنشائه (حيث يتم تعيينها بالأرقام وليس بالأسماء).

منذ متى أصبح ذلك إلزاميًا؟
لم أجده في سجل التغييرات. لقد أنشأت أداة قبل عامين أو ثلاثة لإنشاء الفئات دفعة واحدة، وكانت تعمل بشكل مثالي، والآن أحصل على هذه الرسالة الخطأ…

نعتذر عن أي مشاكل تسببت فيها هذه التغييرات. لقد قمنا بتطبيق هذا التغيير تدريجيًا وأبلغنا الأشخاص بأفضل ما يمكننا، لكن من الصعب رصد كل حالات الاستخدام المتعلقة بالإيقاف التدريجي.