我正在开发一个Web应用程序。哪里有一个输入框来跟踪订单并且对所有人开放。如果有人试图注入易受攻击的脚本,我想返回有趣的消息。例如,如果有人尝试旧学校的技巧
' OR '1'='1
它可能会返回'似乎你是初学者!请继续学习并再试一次“。 我是否必须使用RegEx检查输入?还是有其他更好的方式?有人开发了这样的脚本吗?
答案 0 :(得分:1)
public function verifyMessageSubject($ps)
{
if (!preg_match('%^[A-Za-z0-9"<>/,]{3,100}$%', stripcslashes(trim($ps))))
return false;
return true;
}
如果您想要清理输入,可以试试这个
public function sanitize($data)// CALL THIS FUNCTION BEFORE CALLING ANY OTHER FUNCTION
{
$data = trim($data);
$data = strip_tags($data);
$data = stripcslashes($data);
return $data;
}
public function isCrudFree($data)
{
$flags = array("SELECT", "ALTER", "INSERT", "CREATE", "DROP", "TRUNCATE", "DELETE", "=", "GRANT");
foreach ($flags as $key => $value)
{
$x = stripos($data, $value);
if ($x !== FALSE) // find array elements in the given string
return false;
return true;
}
}
有很多方法可以清理您的数据。如果你决定调用黑客,你将不得不谷歌很多,以确保你的输入安全。 (不是一个好主意)
答案 1 :(得分:0)
如果您正在使用Apache(可能但不能保证),您可以利用.htaccess
重定向在网址,POST请求等中尝试恶意命令的用户
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n).* [NC,OR]
RewriteCond %{HTTP_REFERER} ^(.*)(<|>|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{HTTP_COOKIE} ^.*(<|>|?|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|?>|?<|/|\\\.\.\\).{0,9999}.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*({\s?:;};|\/bin\/bash|\/cgi-bin\/|\/dev\/tcp\/|\/dev\/udp\/).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*({\s?:;};|\/bin\/bash|\/cgi-bin\/|\/dev\/tcp\/|\/dev\/udp\/).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(;|<|>|?|?|\)|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(<|>|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_decode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} printf.*\(.*\) [NC,OR]
# configure `funny` to intercept the `ref` parameter as an example!
RewriteRule ^(.*)$ http://%{SERVER_NAME}/funny/?ref=$1 [L,R=301]