我使用此脚本在我的网站上启用多语言:
<?php
// Start a Session, You might start this somewhere else already.
session_start();
// What languages we support
$available_langs = array('en','ro');
if(isset($_GET['lang']) && $_GET['lang'] != ''){
// check if the language is the one we support
if(in_array($_GET['lang'], $available_langs))
{
$_SESSION['lang'] = $_GET['lang']; // Set session
}
}
// Set our default language session ONLY if we've got nothing
if ($_SESSION['lang']=='') {
$_SESSION['lang'] = 'en';
}
$language = $_SESSION['lang'];
setcookie("lang", $language, time() + (3600 * 24 * 30), null, null, null, true);
// Include active language
include('languages/lang.'.$_SESSION['lang'].'.php');
?>
我的问题是:这有多安全,它现在的编码方式以及我应该怎样做才能提高安全性?我使用Plesk 12管理VPS并启用了网站防火墙ModSecurity,我看到很多尝试通过浏览器使用POST方法在我的网站根目录上传文件,利用“lang”变量。
非常感谢提前。
答案 0 :(得分:0)
从外观上看,这是完全安全的。如果未找到/未指定,则设置合理的默认值(en),并且正确地为en / ro进行模式匹配。
您可能需要考虑使用支持框架/类的语言,因为它会使您的复制工作变得更加容易。尝试查看https://github.com/Philipp15b/php-i18n
答案 1 :(得分:0)
这在语言方面非常安全。但请检查会话是否已经启动,否则会抛出session_already_started错误。
<?php
if(!isset($_SESSION))
session_start();
$availableLanguages = array("en","ro");
$_SESSION['language'] = "en";
$includeFile = "languages/lang.";
if(isset($_GET['lang']) && in_array($_GET['lang'], $availableLanguages))
$_SESSION['language'] = $_GET['lang'];
setcookie("lang", $_SESSION['language'], time() + (3600 * 24 * 30), null, null, null, true);
$includeFile.= $_SESSION['language'].".php";
include($includeFile);
?>