มีผู้ประกอบการปลอดภัย“ สามน้อยกว่า” <<< ในทุบตี?


27

นี่เป็นคำถามสมมุติดังนั้นโปรดอย่าถามฉันว่าทำไมฉันถึงต้องการทำเช่นนี้

สมมติว่าฉันมีตัวแปรGIFที่มีข้อมูลไบนารีและสมมติว่าฉันไม่สามารถใช้ตัว|ดำเนินการไพพ์ได้ต่อไปนี้ควรเป็นวิธีที่ถูกต้องในการใช้ตัวดำเนินการ 'สามน้อยกว่า':

openssl enc -base64 <<< $GIF

อย่างไรก็ตามดูเหมือนว่าฉัน<<<จะไม่ปลอดภัยแบบไบนารีและดังนั้นข้อมูลไบนารีได้รับความเสียหาย

มีเทียบเท่าไบนารีปลอดภัยหรือไม่


โปรดทราบว่าตัวแปรทุบตีไม่สามารถมีตัวอักษร NUL ดังนั้นตัวแปรของคุณ$GIFสำหรับการเริ่มต้นจะไม่ถือไบนารี่แบบเต็มก่อนที่จะเริ่ม อย่างไรก็ตามสำหรับข้อยกเว้นของตัวละคร NUL มันถือตัวอื่น ๆ ทั้งหมด (เป็นผู้อ้างอิง: vaab.blog.kal.fr/2014/05/03/… )
vaab

คำตอบ:


31

การเปลี่ยนเส้นทางสตริงที่นี่ ( <<<) เป็นรูปแบบที่เรียบง่ายของการเปลี่ยนเส้นทางเอกสารที่นี่ ( <<) นี่คือการเปลี่ยนเส้นทางสตริงไม่ "ปลอดภัยไบนารี"; Bash จะทำการขยายบนสตริงที่นี่ นอกจากนี้ Bash จะต่อท้ายบรรทัดใหม่ที่ส่วนท้ายของสตริงที่นี่ (ออกคำสั่งxxd -p <<< "foo"และคุณจะได้รับ666f6f0aผลตอบแทน)

เดิมพันที่ปลอดภัยของคุณเท่านั้นไม่รวมท่อเป็นI / O เปลี่ยนเส้นทาง

คำถามความปลอดภัยที่คล้ายกันไม่ไบนารีที่นี่ คุณสามารถจัดเก็บข้อมูลที่เข้ารหัสและลองสิ่งนี้

COMMAND_WITH_BIN_INPUT <(uudecode <(echo "$uuEncodedData")) 

อย่างไรก็ตามสิ่งนี้อยู่ไม่ไกลจาก

echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT

แต่ไม่มี metachar ท่อ


1
หรือลองod -a <<< ""แล้วคุณจะเห็นnlแทนค่าฐานสิบหก
jcalfee314

@Wesley นอกจากนี้ยังมี archive.org :) ลิงค์เดิม: web.archive.org/web/20120126213653/http://tldp.org/LDP/abs/html/…
Jason C

4

Bash ไม่ปลอดภัยแบบไบนารีโดยทั่วไปและจะทำให้โมฆะและบรรทัดใหม่ในตัวแปรที่มีเนื้อหาไบนารีเสียหายระหว่างการแทนที่

ดังนั้นฉันคิดว่าคำตอบคือ "ไม่" แต่พื้นฐานมากกว่า "ไม่ได้อยู่ในภาษาสคริปต์เชลล์" เพราะพวกเขาดูเหมือนจะมีปัญหากับไบนารี

ฉันจะบอกว่าอย่างไรก็ตามคุณวางแผนที่จะรับข้อมูลเป็น $ GIF แต่คุณได้รับมันเป็นไฟล์หรือใช้ python เป็นภาษาสคริปต์ทางเลือกซึ่งจะจัดการข้อมูลไบนารีโดยไม่มีปัญหา


1
การอ้างอิงหรือความแม่นยำหรือตัวอย่างง่าย ๆ จะมีประโยชน์มากกว่าการเดายากและความรู้สึกทั่วไปจากด้านข้างของคุณ มีวิธีการรับข้อมูลไบนารีแยกวิเคราะห์ผ่านทุบตี
vaab
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.