مرحبا بالجميع ، أيها الأحباب!
هذه قصة قصيرة - مثال على تطبيق المهارات الفنية لتجاوز النظام لأغراضهم الخاصة.
مشرف: الاهتمام! هذا النص هو وصف للاحتمالات لأغراض تجريبية. نذكرك أن تكرار هذه الإجراءات قد يؤدي إلى انتهاك القانون.
خلفية مختصرة هي أنني بيلاروسي ، أعيش في سان بطرسبرغ ، وقررت استبدال رخصة القيادة الروسية الحالية. بعد أن تعلمت من خصم 30 ٪ عند استبدال من خلال موقع خدمة الدولة ، قررت ، بصفتي بيلاروسيا متعطشا ، الاستفادة منه على الفور.
يجب أن أقول على الفور أنه لم يرتكب أي شيء غير قانوني ، وإلا فلن تظهر هذه المقالة.
ذهبت إلى خدمات الدولة ، واخترت في قائمة التطبيق
" استبدال رخصة القيادة " .
أنا أملأ جميع الحقول ، وانقر فوق "إرسال" ، وبام - خطأ. "الحقل مطلوب."

جوازات السفر البيلاروسية ، على عكس جوازات السفر الروسية ، بها سلسلة من حرفين لاتينيين.
من الواضح أن هذه السلسلة لم يتم انتقاؤها من البيانات الموجودة في حسابي في بيان لهذا السبب. ما كنت مقتنعا بفتح لوحة المطور في المتصفح ورؤية قناع حقل النص هذا:
mask = "00 00" .

والحقل
للقراءة فقط . وتأكد من ملء! وسلسلة من "
PP " في ذلك لا أستطيع الدخول.
في البداية ، كمستخدم محترم ، حاولت حل هذه المشكلة بطريقة حضارية.
استمرت مراسلاتي بدعم من خدمات الدولة أسبوعين ، وسوف أصفها بإيجاز فقط. كانت اقتراحاتي إما لإزالة السمة
للقراءة فقط من حقل سلسلة جواز السفر ، أو لإزالة
القناع من الأرقام والتقاطه بشكل صحيح من حسابي. في البداية ، شرحت ببساطة جوهر المشكلة التي يجب دعمها ، والتي استغرقت الكثير من الوقت. ثم حصلت على الإجابات القياسية حول تنظيف ملفات تعريف الارتباط وذاكرة التخزين المؤقت للمتصفح ، إلخ. ثم تلقيت إجابة مفادها أن المراجعة أمر مستحيل ، لأن نموذج الطلب مقدم من وزارة الشؤون الداخلية ، وبالتالي من الضروري الاتصال بوزارة الشؤون الداخلية. بعد ذلك ، واستجابة لمثابرتي ، تلقيت رسالة تفيد بأنني مواطن أجنبي ولا يحق لي عمومًا استخدام هذه الخدمة.
لقد كانت هناك مسألة مبدأ بالفعل ، فقد قررت المضي قدمًا واستمرت في مهاجمة الدعم ، وفي ذلك الوقت اعتقدت - لماذا لا أحاول ملء هذا الحقل يدويًا. أنا لا أدخل بيانات الآخرين. على العكس من ذلك ، أتأكد من أن ما لا يعمل بشكل صحيح يعمل بشكل صحيح.
لذا ، افتح التطبيق ، وافتح لوحة المطور في المتصفح ، وأجد العنصر المرغوب فيه ، ومسح جميع السمات المتعلقة بالقناع والقراءة فقط فيه ، ومحاولة إدخال سلسلة فيه:

با بام! يتم إدخال الأرقام في الحقل ، والحروف ليست كذلك.
لقد حاولت حتى محو كل السمات التي يمتلكها هذا العنصر ومحاولة إدخال الحروف هناك. لم ينجح استنتجت منه أن إدخال الأحرف في الحقول تتم معالجته في مكان ما في Javascript.
أنا مبرمج تطبيق سطح المكتب ، وأنا لست مطور ويب ، وليس لدي مهارات تصحيح أخطاء خطيرة للبرامج النصية على الويب (وكذلك بعض أدوات تصحيح الأخطاء غير لوحة Developer). ومع رؤية مقدار الكود الذي تستخدمه هذه الصفحة ، قررت عدم تضييع الوقت ، لكن ظرفًا واحدًا ساعدني في ذلك. في علامة التبويب وحدة التحكم ، رأيت أنه عند إدخال أي حرف في حقول النص ، يتم تسجيله.

ذهبت إلى الرابط المحدد
لصفحات pages-min-9fa87087e7.js ورأيت الكود التالي (بعد التنسيق مع الزر
{} 
لسهولة القراءة).
window.addEventListener("keyup", function(e) {
e.which <= 90 && 48 <= e.which && (i += e.key.toLowerCase(),
n.forEach(function(e) {
console.log(i),
-1 != i.indexOf(e) && (r = !1,
l(),
i = "")
}));
if (13 === e.keyCode) {
s++;
var t = new Date;
t - a <= o && 3 === s && (r = !1,
l(),
t = s = 0),
window.setTimeout(function() {
s = 0
}, o),
a = t
}
});
.
window keyup , , . , .
– . - , input . , , ?
removeEventListener(), , .
, , – , ( , ) , :
var el = document.getElementById('mydiv'),
elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);
onkeyup input’. , :
<input
id="form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie"
type="text"
ng-model="inp"
ng-trim="false"
ng-model-options="{ updateOn: 'default blur', debounce: { 'default': debounceTime, 'blur': 0 } }"
tabindex="-1"
ng-blur="onBlurHandler(model.value, $event)"
ng-focus="onFocusHandler($event)"
ng-keydown="inputKeyup($event)"
class="PGU-FieldTextInputBasic field-padded -metrika-nokeys ng-valid ng-isolate-scope ng-valid-maxlength ng-dirty ng-valid-parse ng-touched"
change="changeByUser()"
model="item"
idinp="form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie"
style=""
onkeyup="
document.getElementById('form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie').value='PP';
var el = document.getElementById('form.FormStep2.Panel11.Panel_IGdoc.Panel1.idDocumentSerie'), elClone = el.cloneNode(true);
el.parentNode.replaceChild(elClone, el);
"
>
– ,
onkeyup, input’
PP. !
«» - . Input - .

– -, - . – , , , input’, , . .
, .
. – -, . , . - . , . .
-, . - - .
, , , .