Chr*_*dge 15
这是一些实现Geoff Reedy答案的代码.我将此代码放在公共域中.
<?
$test = "Test characters: # $ % & ~ _ ^ \ { }.";
header( "content-type:text/plain" );
print latexSpecialChars( $test );
exit;
function latexSpecialChars( $string )
{
$map = array(
"#"=>"\\#",
"$"=>"\\$",
"%"=>"\\%",
"&"=>"\\&",
"~"=>"\\~{}",
"_"=>"\\_",
"^"=>"\\^{}",
"\\"=>"\\textbackslash",
"{"=>"\\{",
"}"=>"\\}",
);
return preg_replace( "/([\^\%~\\\\#\$%&_\{\}])/e", "\$map['$1']", $string );
}
Run Code Online (Sandbox Code Playgroud)
使用 LaTeX 执行有害操作的唯一可能性(AFAIK)是启用使用\write18. 仅当您使用 --shell-escape 或 --enable-write18 参数(取决于您的发行版)运行 LaTeX 时,这才有效。
因此,只要您不使用这些参数之一运行它,您就应该是安全的,无需过滤掉任何部分。
除此之外,人们仍然可以使用\newwrite、\openout和\write命令写入其他文件。让用户创建和(覆盖)写入文件可能是不需要的?因此您可以过滤掉这些命令的出现。但是保留某些命令的黑名单很容易失败,因为恶意者可以通过混淆输入文档来轻松隐藏实际命令。
编辑:使用有限帐户运行 LaTeX 命令(即不写入非 Latex/项目相关目录)并禁用它\write18可能比保留“危险”命令黑名单更容易、更安全。
| 归档时间: |
|
| 查看次数: |
9356 次 |
| 最近记录: |