转义字符的首选顺序是什么?
例如在PHP
环境中:
1)shell - > database = return escapeshellcmd(mysqli_real_escape_string($string));
?
2)数据库 - > shell = return mysqli_real_escape_string(escapeshellcmd($string));
?
3)完全没有区别?
只是为了澄清,我目前正在尝试修复的网站,包含许多旧的,已弃用的功能,使用magic_quotes,并且在从旧主机转移到当前问题之后基本上无法使用,这些问题出现了。
第一个问题是MySQL转义,我用mysql_real_escape_string();
修复,但仍然存在CLI/Socket
MySQL连接环境的问题。也就是说,当你有一个textarea
内的值引用一个UNIX命令时,前面有一个/
- 正斜杠符号并且你发布它 - Apache结果是501方法未实现。
所以是的,我必须逃避mysql
,并逃脱shell
命令。但是,shell
命令转义(原始问题中的第1个例子)导致UTF-8字符制动并丢失了许多所需的HTML符号。
需要转义的内容来自WYSIWYG编辑器(SPAW),因此它包含很多引号,并且不时有UNIX命令,类似于我们的国家 - 拉脱维亚 - 货币。 “/ ls”,其中LS是货币。
网站由客户本身更新,而不是技术人员,它必须保持这种状态 - 我的意思是,我们无法接管内容编辑。另外,虽然我们可以告诉他们不要使用/ls
,但是如果例如他们意外地到达/mkdir
那可能类似于某些东西的识别符,则UNIX问题仍然存在。
他们是一家活跃的旅游公司,因此需要尽快修复。由于我们超越了他们的网站,他们知道系统已经坏了,但他们目前没有免费资金用于新网站/修复现有网站。我们得出的结论是,修复它会更难,因此比转移到我们的CMS更昂贵,但钱仍然是钱。
那么,如何从这个WYSIWYG编辑器的textarea中转义shell和数据库命令,这是一个字符串,但是,同时保留我们拉脱维亚字母的UTF-8编码 - ā, š, č, ž
等?
也许我不必逃避两者,这就是我要问的原因。
提前致谢!
<div>
<span style="color: rgb(0, 0, 128); " class="Apple-style-span">
<span style="font-size: 12px; " class="Apple-style-span">
/ls
</span>
</span>
</div>
SPAW会自动添加所有这些哑元素,是的,如果/<command>
在字符串中, 501 !
这就是停止所需的全部内容,只是一个引用UNIX命令行函数的命名空间。就像在这种情况下/ls
一样,但可能是/rmdir
,/mkdir
等。你可以在那里有20000个符号,没有/ls
它会起作用。一旦有这样的事情 - bam,死了!
最初有一个功能是为了清除所有错误(至少我想是这样,它的原始名称是 - removeShit();
):
$string = $_POST['wysiwyg_textarea']; // SPAW text area
function removeStuff($string){
return str_replace('/wysiwyg/empty.html', '', $txt);
}
文件/wysiwyg/empty.html
是0字节 - 完全空文件。
但这并不能解决mysql转义和/或UNIX shell命令识别问题。因此,我需要一个修复来逃避UNIX命令和任何MySQL有害的东西。
所以,我试图用:
return escapeshellcmd(mysqli_real_escape_string($string));
但是这一个带有所有utf-8字符,而且,所有新的线符号都被转换为简单的字符串“rn”,我猜是\r\n
。
现在我正在寻找一种能够逃避MySQL和Shell cmd的功能,因为我无法想到如何治愈所有这些混乱的另一种方式。
答案 0 :(得分:1)
都不是。
使用 escapeshellcmd()
或mysqli_real_escape_string()
,具体取决于您计划对$string
执行的操作。
切勿同时使用两者。这没有意义。