php多语言脚本和安全性

时间:2015-07-09 13:47:10

标签: php security multilingual

我使用此脚本在我的网站上启用多语言:

<?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”变量。

非常感谢提前。

2 个答案:

答案 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);
?>