คำถามติดแท็ก sql-injection

6
ขั้นตอนการจัดเก็บป้องกันการฉีด SQL หรือไม่
เป็นความจริงหรือไม่ที่ขั้นตอนการจัดเก็บป้องกันการโจมตี SQL injection กับฐานข้อมูล PostgreSQL ฉันทำวิจัยเล็กน้อยและพบว่า SQL Server, Oracle และ MySQL ไม่ปลอดภัยต่อการฉีด SQL แม้ว่าเราจะใช้ขั้นตอนการจัดเก็บเท่านั้น อย่างไรก็ตามปัญหานี้ไม่มีอยู่ใน PostgreSQL การใช้โพรซีเดอร์ที่เก็บไว้ในแกน PostgreSQL ป้องกันการโจมตีจากการฉีด SQL หรือเป็นอย่างอื่นหรือไม่? หรือ PostgreSQL มีความอ่อนไหวต่อการฉีด SQL แม้ว่าเราจะใช้ขั้นตอนการจัดเก็บเท่านั้น ถ้าเป็นเช่นนั้นโปรดแสดงตัวอย่าง (เช่นหนังสือไซต์กระดาษ ฯลฯ )

1
การฉีด SQL ในฟังก์ชัน Postgres กับเคียวรีที่เตรียมไว้
ใน Postgres แบบสอบถามที่เตรียมไว้และฟังก์ชั่นที่ผู้ใช้กำหนดเองนั้นเทียบเท่ากับกลไกในการป้องกันการฉีด SQLหรือไม่ มีข้อดีโดยเฉพาะอย่างยิ่งในแนวทางหนึ่งมากกว่าอีกวิธีหนึ่งหรือไม่?

2
เหตุใด SQL Injection จึงไม่เกิดขึ้นกับแบบสอบถามนี้ภายในกระบวนงานที่เก็บไว้
ฉันทำขั้นตอนการจัดเก็บต่อไปนี้: ALTER PROCEDURE usp_actorBirthdays (@nameString nvarchar(100), @actorgender nvarchar(100)) AS SELECT ActorDOB, ActorName FROM tblActor WHERE ActorName LIKE '%' + @nameString + '%' AND ActorGender = @actorgender ตอนนี้ฉันพยายามทำอะไรแบบนี้ บางทีฉันอาจทำผิด แต่ฉันต้องการให้แน่ใจว่ากระบวนการดังกล่าวสามารถป้องกัน SQL Injection: EXEC usp_actorBirthdays 'Tom', 'Male; DROP TABLE tblActor' ภาพด้านล่างแสดง SQL ด้านบนที่ถูกดำเนินการใน SSMS และผลลัพธ์ถูกแสดงอย่างถูกต้องแทนที่จะมีข้อผิดพลาด: Btw ฉันเพิ่มส่วนต่อไปที่อัฒภาคหลังจากแบบสอบถามเสร็จสิ้นการดำเนินการ จากนั้นฉันก็ดำเนินการอีกครั้ง แต่เมื่อฉันตรวจสอบเพื่อดูว่าตาราง tblActor มีอยู่หรือไม่มันยังคงอยู่ที่นั่น ฉันกำลังทำอะไรผิดหรือเปล่า? …

2
ฉันจะแทรกใบหน้าที่ยิ้มเข้าไปใน MySQL ได้อย่างไร (😊)
ฉันใช้ MySQL 5.5.21 และพยายามที่จะแทรกอักขระ '\ xF0 \ x9F \ x98 \ x8A' แต่สำหรับชีวิตของฉันฉันไม่สามารถหาวิธีที่จะทำ ตามฟอรัมต่าง ๆ ที่ฉันได้อ่านมันเป็นไปได้ แต่เมื่อใดก็ตามที่ฉันลองข้อมูลก็จะถูกตัดทอน mysql> INSERT INTO hour ( `title`, `content`, `guid` , `published` , `lang` , `type` , `indegree` , `lon` , `lat` , `state` , `country` , `hour` ) VALUES ( "title" , "content 😊 …

4
ทำไมคุณต้องการหลีกเลี่ยง Dynamic SQL ในขั้นตอนการจัดเก็บ?
ฉันเคยได้ยินคนหนึ่งบอกว่าคุณไม่ต้องการใช้ Dynamic SQL คุณสามารถยกตัวอย่างที่เป็นรูปธรรมหรือตัวอย่างในชีวิตจริงได้ไหม ส่วนตัวฉันรหัสมันสองสามครั้งในฐานข้อมูลของฉัน ฉันคิดว่ามันใช้ได้เพราะความยืดหยุ่น ฉันเดาว่าเกี่ยวกับ SQL Injection หรือ Performance มีอะไรอีกไหม

3
มีวิธีใดบ้างที่จะแยกสตริงออกและฉีด SQL โดยไม่ต้องใช้เครื่องหมายคำพูดเดี่ยวใน oracle?
ฉันกำลังทดสอบแอปพลิเคชันที่ใช้ Oracle และพบรหัสต่อไปนี้ Query = "เลือกชื่อจากพนักงาน WHERE id = '" + PKID + "'; เช่นสตริงการสืบค้นมีเครื่องหมายคำพูดล้อมรอบค่า PKID ซึ่งได้มาจาก URL โดยตรง เห็นได้ชัดว่านี่คือการฉีด SQL แบบคลาสสิกที่รอให้เกิดขึ้น ... ยกเว้นแอปพลิเคชันอยู่เบื้องหลัง CA SiteMinder ซึ่งบล็อก URL ใด ๆ ด้วยการเสนอราคาเดียว (ในรูปแบบใด ๆ ) จากการถูกส่งผ่านไปยังแอปพลิเคชัน มีวิธีใดบ้างที่จะแยกออกจากสตริงและฉีด SQL โดยไม่ต้องใช้เครื่องหมายคำพูดเดี่ยว? แก้ไข: ขออภัยฉันควรชัดเจนกว่า - ฉันเข้าใจว่าควรเขียนอย่างไร แต่ฉันต้องโน้มน้าวผู้คนว่าเป็นปัญหาที่เอาเปรียบ ในขณะนี้เพราะมันอยู่เบื้องหลัง siteminder ซึ่งบล็อกราคาเดียวดังนั้นมันจะเป็นการแก้ไขที่มีลำดับความสำคัญต่ำ

1
ฟังก์ชันใดที่เสนอราคาตัวระบุใน dynamic-sql กับ SQL Server
วิธีการ SQL Server ของตัวระบุการอ้างอิงอย่างปลอดภัยสำหรับการสร้าง sql แบบไดนามิกคืออะไร MySQL มี quote_identifier PostgreSQL มี quote_ident ฉันจะมั่นใจได้อย่างไรว่าได้รับชื่อคอลัมน์ที่สร้างขึ้นแบบไดนามิกสำหรับคำสั่งที่สร้างขึ้นแบบไดนามิกว่าคอลัมน์นั้นไม่ใช่การโจมตี SQL-injection สมมติว่าฉันมีคำสั่ง SQL SELECT [$col] FROM table; ซึ่งเป็นหลักเช่นเดียวกับ 'SELECT [' + $col + '] FROM table;' จะหยุดการโจมตีฉีดอะไรที่ $col = "name] FROM sys.objects; \r\n DROP TABLE my.accounts; \r\n\ --"; ที่เกิดขึ้นใน SELECT [name] FROM sys.objects; DROP TABLE my.accounts; -- …

1
เราควรใช้ QUOTENAME เพื่อป้องกันการโจมตีจากการฉีดหรือไม่
ฉันดูขั้นตอนการจัดเก็บแบบเก่าวันนี้และสังเกตว่ามันใช้quotenameกับพารามิเตอร์อินพุต หลังจากขุดลงไปเพื่อหาว่ามันทำอะไรฉันก็เจอเว็บไซต์นี้ ตอนนี้ฉันเข้าใจแล้วว่ามันทำอะไรและจะใช้อย่างไร แต่เว็บไซต์บอกว่ามันถูกใช้เพื่อลดการโจมตีจากการฉีด SQL เมื่อฉันใช้ในการพัฒนาแอพที่สอบถามฐานข้อมูลโดยตรงโดยใช้ asp.net ฉันจะใช้พารามิเตอร์ ADO.Net เพื่อส่งผ่านการป้อนข้อมูลของผู้ใช้เป็นค่าที่แท้จริงและไม่เคยกังวลเกี่ยวกับการปกป้องในขั้นตอนการจัดเก็บของฉัน ตอนนี้ฉันกำลังเขียนโพรซีเดอร์ที่เก็บไว้ซึ่งจะถูกใช้โดยแอปพลิเคชันที่ฉันไม่ได้เขียนดังนั้นฉันจึงจำเป็นต้องลองและป้องกันจากการโจมตีของการฉีดที่ระดับโพรซีเดอร์เป็นquotenameวิธีที่ดีที่สุดในการทำสิ่งนี้ วิธี? รหัสที่ทำให้ฉันในรูปแบบความคิดนี้ ( @parm1เป็นพารามิเตอร์ที่ผู้ใช้ป้อน): 'SELECT project [Project], project_desc [Description], customer [Customer], cpnyid [Company] FROM PJPROJ (nolock) where project like ' + quotename(@parm1,'''') + '
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.