سؤال

لقد تم تكليفي بتصفح عدد من مواقع ColdFusion التي تعرضت مؤخرًا لهجوم سيئ لحقن SQL.يتضمن عملي في الأساس إضافة <cfqueryparam> العلامات لجميع SQL المضمنة.لقد فهمت معظم الأمر، ولكن هل يمكن لأي شخص أن يخبرني عن كيفية استخدام cfqueryparam مع عامل التشغيل LIKE؟

إذا كان الاستعلام الخاص بي يبدو كالتالي:

select * from Foo where name like '%Bob%'

ماذا ينبغي لي <cfqueryparam> تبدو العلامة؟

هل كانت مفيدة؟

المحلول

@ جويل ، لا بد لي من الاختلاف.

select a,b,c
from Foo
where name like <cfqueryparam cfsqltype="columnType" value="%#variables.someName#%" />
  1. لا تقترح على شخص ما أنه يجب عليهم "اختيار النجم". شكل سيء!ولو على سبيل المثال!(حتى منسوخة من السؤال!)

  2. تم تجميع الاستعلام مسبقًا ويجب عليك تضمين حرف (أحرف) البدل كجزء من المعلمة التي يتم تمريرها إلى الاستعلام.هذا التنسيق أكثر قابلية للقراءة وسيتم تشغيله بكفاءة أكبر.

  3. عند إجراء تسلسل سلسلة، استخدم عامل علامة الضم (&)، وليس علامة الجمع.من الناحية الفنية، في معظم الحالات، سوف يعمل plus بشكل جيد ...حتى تقوم برمي NumberFormat() في منتصف السلسلة وتبدأ في التساؤل عن سبب إخبارك بأنك لا تقوم بتمرير رقم صالح عندما قمت بالتحقق منه وقد قمت بذلك.

نصائح أخرى

select a,b,c
from  Foo
where name like  <cfqueryparam cfsqltype="cf_sql_varchar" value="%Bob%" />;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top