php - PHP - 如何让 pack() 返回与常规字符串相同的字符串?
问题描述
我不确定问题是什么。我认为这是一个编码问题。我想要的是
pack('V', 0x41) == "A"
返回真。即使来自 mb_detect_encoding() 的编码为两者都返回 ASCII 并且在回显时都将“A”打印到屏幕上,但情况并非如此。真正的问题是,当打包字符串包含在 sql 查询中时:
$sql = "SELECT item_name, item_description FROM items WHERE item_name LIKE '$querystr%'";
它无法执行查询,即使打印到屏幕上的字符串是等效的。这是针对我正在创建的 CTF 挑战,所以是的,该代码意味着容易受到注入。
解决方案
中的 V 参数pack
采用 32 位无符号值(小端字节顺序),因此您的调用看起来像
pack('V', 0x00000041) === "A\0\0\0"
您可以使用 trim 去除多余的空值,您可以使用其他选项,例如c
pack('c', 0x41) === "A"
推荐阅读
- python - 如何使用 IBapi 获取市场订单的成交价格?
- html - 如何在不重新加载页面 FLASK 的情况下更新 HTML 图像
- cmake - 你如何让 CMake 打印 *all* 命令而不仅仅是构建命令?
- javascript - 显示用户搜索的结果,最多使用三个输入
- apache-kafka - 带有数据转换的 Spring Cloud Stream Kafka
- firebase - 在flutter firestore中使用.data []时出现“未定义运算符'[]'”错误
- reactjs - 将 Material UI 的 Text 字段从黑色更改为白色
- javascript - Firebase 数据到 HTML 会影响样式
- html - 如何在小div中适合大图像
- google-cloud-platform - 无法在 GCP 或 Google 网上论坛中创建网上论坛 - 作为所有者